IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

变量在内存中的位置

扶凯 2011-07-24 15:02:04 累计浏览 3,904 次
本机暂存

进程的逻辑内存空间
共享库和 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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 关于linux内存free的一些事情 (累计阅读 12,867)
  2. linux内核研究笔记(一)内存管理 – page介绍 (累计阅读 10,487)
  3. 高性能web服务器-读书笔记 (累计阅读 7,776)
  4. Linux上进程的表示以及入门 (累计阅读 7,741)
  5. 缓存设计的一些思考 (累计阅读 6,998)
  6. malloc()之后,内核发生了什么? (累计阅读 6,403)
  7. 如何实现一个malloc (累计阅读 6,145)
  8. MongoDB与内存 (累计阅读 6,122)
  9. iOS内存暴增问题追查与使用陷阱 (累计阅读 5,838)
  10. 有道实习生笔试总结 (累计阅读 5,593)