C/C++ 变量在内存中的存储
来源:互联网 发布:is语音淘宝放单频道 编辑:程序博客网 时间:2024/05/19 11:19
首先是寄存器变量存放在寄存器中,
其他的变量存放在内存中,下表为内存布局
高内存地址
栈
向下增长,可读可写可执行
空洞
向上增长
堆
向上增长,可读可写可执行
BSS段(未初始化数据段)
向上增长,可读可写不可执行
.data 数据段
向上增长,可读可写不可执行
.text 文本段(代码段)
向上增长,可读可写不可执行
低内存地址
auto 存储类指明符--用于说明具有局部作用域的变量,它表示变量具有局部(自动)生成期,但由于它是所有局部作用域变量说明的缺省存储类指明符,所以使用得很少。要注意的是,所有在函数内部定义的变量都是局部变量,函数内部定义的变量其作用域只在函数内部。它的生存期为该函数运行期间,一旦离开这个函数或这个函数终止,局部变量也随之消失。register 存储类指明符--当声明了这个指明符后,编译程序将尽可能地为该变量分配CPU内部的寄存器作为变量的存储单元,以加快运行速度。注意,寄存器与存储器是不同的。寄存器一般在CPU内部,而存储器一般指外部的(比如内存条),CPU内部的寄存器其运算速度是很高的。当寄存器已分配完毕,就自动地分配一个外部的内存。它的作用等价于auto,也只能用于局部变量和函数的参量说明。
static 存储类指明符--表示变量具有静态生成期。static变量的的特点是它离开了其作用域后,其值不会消失。 当回到该作用域之后又可以继续使用这个static变量的值。
1)变量可以存储在内存的不同地方,这依赖于它们的生成期。在函数上部定义的变量(全局变量或static外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程。这些变量被存储在数据段(Data Segment)中。数据段是在内存中为这些变量留出的一段大小固定的空间,它分为二部分,一部分用来初始化变量,另一部分用来存放未初始化的变量。
2)在函数内部定义的auto变量(没有用关键字static定义的变量)的生成期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变量只在调用该函数期间存在。这些变量被存储在栈(stack)中。栈是内存中的一段空间,开始很小,以后逐渐自动变大,直到达到某个预定义的界限。
3)当用malloc等函数给指针分配一个地址空间的时候,这个分配的内存块位于一段名为“堆(heap)”的内存空间中。堆开始时很小,但调用malloc或clloc等内存分配函数时它就会增大。堆可以和数据段或栈共用一个内存段,也可以有它自己的内存段,这完全取决于编译选项和操作系统。与栈相似,堆也有一个增长界限,并且决定这个界限的规则与栈相同。
示例:
#include <stdio.h>
#include <unistd.h>
main ()
{
register int a = 2;
const int b = 3;
int c = 3;
printf ("%d\n", getpid());
while (1);
}
00154000-002ab000 r-xp 00000000 08:02 3368534 /lib/libc-2.5.so
002ab000-002ad000 r-xp 00156000 08:02 3368534 /lib/libc-2.5.so
002ad000-002ae000 rwxp 00158000 08:02 3368534 /lib/libc-2.5.so
002ae000-002b1000 rwxp 002ae000 00:00 0
00787000-007a2000 r-xp 00000000 08:02 3368527 /lib/ld-2.5.so
007a2000-007a3000 r-xp 0001a000 08:02 3368527 /lib/ld-2.5.so
007a3000-007a4000 rwxp 0001b000 08:02 3368527 /lib/ld-2.5.so
00eec000-00eed000 r-xp 00eec000 00:00 0 [vdso]
08048000-08049000 r-xp 00000000 08:02 915954 /root/Desktop/test/a.out
08049000-0804a000 rw-p 00000000 08:02 915954 /root/Desktop/test/a.out
b7fcf000-b7fd1000 rw-p b7fcf000 00:00 0
b7fda000-b7fdb000 rw-p b7fda000 00:00 0
bf90d000-bf922000 rw-p bffe9000 00:00 0 [stack]
- C/C++变量在内存中的存储
- C/C++ 变量在内存中的存储
- c&c++中变量在内存中的存储
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- c/c++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布 .
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- C/C++变量在内存中的分布
- 每天一个linux命令(4):mkdir命令
- 怎样在ubuntu下安装Qt开发环境
- Centos网络设置,开关机命令,iptables
- RMAN Recipes 中对Flash Recovery Area的总结
- 每天一个linux命令(3):pwd命令
- C/C++ 变量在内存中的存储
- 把握销售中的八个细节作个好的观察家(1)
- 每天一个linux命令(2):cd命令
- thinkphp M和D方法的区别
- 每天一个linux命令(1):ls命令
- Ubuntu 安装 Qt 开发环境 简单实现
- MIT/GNU Scheme用户手册(一)
- HDU 4345(想不出来的DP)
- 基于优先权的时间片轮转算法