IT技术博客大学习 共学习 共进步

变量在内存中的位置

扶凯 2011-07-24 15:02:04 浏览 3,782 次

进程的逻辑内存空间
共享库和 mmap 内存映射
数据段 (全局static和本地static,全局变量)
代码段
堆(malloc ,引用)
栈 (本地变量,所以这个会是个随机数)

测试用程序

#include <stdio.h> #include <stdlib.h> #include <unistd.h>   static int static_glob = 0; int int_glob = 0;  int main() {     int int_local;     static int static_local = 0;     int *pa = malloc(sizeof(int));     *pa = 0;     printf("local int %p\n", &int_local);     printf("glob  int %p\n", &int_glob);     printf("glob  static %p\n", &static_glob);     printf("local static %p\n", &static_local);     printf("local pa %p\n", pa);             while(1)         sleep(1);      return 0; } </unistd.h></stdlib.h></stdio.h>

proc 下的进程 Id 下的 maps 文件可以见到内存的分配
heap 堆
stack 栈
数据区
代码区之类

$ cat /proc/13458/maps
007a6000-007a7000 r-xp 00000000 00:00 0 [vdso]
00c84000-00ca0000 r-xp 00000000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00ca0000-00ca1000 r--p 0001b000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00ca1000-00ca2000 rw-p 0001c000 08:06 914742 /lib/i386-linux-gnu/ld-2.13.so
00e86000-00fe0000 r-xp 00000000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe0000-00fe1000 ---p 0015a000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe1000-00fe3000 r--p 0015a000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe3000-00fe4000 rw-p 0015c000 08:06 914755 /lib/i386-linux-gnu/libc-2.13.so
00fe4000-00fe7000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 08:07 132093 /home/fukai/C/4
08049000-0804a000 r--p 00000000 08:07 132093 /home/fukai/C/4
0804a000-0804b000 rw-p 00001000 08:07 132093 /home/fukai/C/4
09757000-09778000 rw-p 00000000 00:00 0 [heap]
b76ff000-b7700000 rw-p 00000000 00:00 0
b7711000-b7714000 rw-p 00000000 00:00 0
bfd61000-bfd82000 rw-p 00000000 00:00 0 [stack]

程序执行的结果

$ ./4
local int 0xbfd810b8 stack 栈
glob int 0x804a024 data 全局
glob static 0x804a028 data 全局static
local static 0x804a02c data 本地static
local pa 0x9757008 heap 堆 引用

建议继续学习

  1. Axure之变量的使用 (阅读 5,042)
  2. 深入PHP使用技巧之变量 (阅读 4,662)
  3. 从shell中向awk传递变量实例 (阅读 4,482)
  4. Linux的shell变量 (阅读 3,602)
  5. c语言全局变量和局部变量问题汇总 (阅读 3,585)
  6. PHP的可变变量名 (阅读 3,244)
  7. 详解Linux bash中的变量 (阅读 3,205)
  8. PHP 中对变量unset,可以销毁变量中的资源 (阅读 2,922)
  9. 如何获取一个变量的名字 (阅读 2,823)