Memorky Layout and Allocation

内存布局解析
本文详细介绍了Linux和Windows下程序的内存布局,包括全局区、静态区、栈区、字符串常量区、堆区及程序代码区的分配情况,并举例说明了各种变量的存储位置。

Lecture 5 Memorky Layout and Allocation
使用静态内存分配方式的不一定都是静态变量, 也可能是全局变量
但静态变量一定是静态内存分配

int a;
int b = 1;
static int c; //静态全局变量:只在文件内使用
static int d = 1;
char *str = "str";
static char *str1 = "str1";

void func() {
int e;
int f = 1;
static int g; //静态局部变量:只在函数内使用, 函数执行完后并不释放, 可供下次调用函数时使用
static int h = 1;
char *str2 = "str2";
static char *str3 = "str3";
int *p = (int *)malloc(sizeof(int));
}
Linux的内存布局
(1)全局区和静态区
初始化:
初始化的全局变量b : 0x80495ec
初始化的静态全局变量d : 0x80495f0
全局字符串str : 0x80495f4
全局静态字符串str1 : 0x80495f8
局部静态字符串str3 : 0x80495fc
初始化的静态局部变量h : 0x8049600
未初始化: 系统自动赋予0
未初始化的静态全局变量c : 0x8049610
未初始化的静态局部变量g : 0x804960c
未初始化的全局变量a : 0x8049614
(2)栈区
局部变量:
未初始化的局部变量e : 0xbfd36fdc (使用未初始化的局部变量可能出错,因为它的值是随机的)
初始化的局部变量f : 0xbfd36fe0
局部字符串str2 : 0xbfd36fe4
(3)字符串常量区
字符串常量:
全局字符串str的内容 : 0x80484c0
全局静态字符串str1的内容 : 0x80484c4
局部静态字符串str3的内容 : 0x80484c9
局部字符串str2的内容 : 0x80484ce
(4)堆区
动态分配的内存地址p: 0x8e91008
(5)程序代码区

Windows的内存布局

(1)全局区和静态区
初始化:
初始化的全局变量b : 0x00417000
初始化的静态全局变量d : 0x00417004
全局字符串str : 0x00417008
全局静态字符串str1 : 0x0041700c
局部静态字符串str3 : 0x00417014
初始化的静态局部变量h : 0x00417010
未初始化: 系统自动赋予0
未初始化的静态全局变量c : 0x00417160
未初始化的静态局部变量g : 0x00417164
未初始化的全局变量a : 0x0041718c
(2)栈区
局部变量:
未初始化的局部变量e : 0x0012fe8c (使用未初始化的局部变量可能出错,因为它的值是随机的)
初始化的局部变量f : 0x0012fe80
局部字符串str2 : 0x0012fe74
(3)字符串常量区
字符串常量:
全局字符串str的内容 : 0x0041574c
全局静态字符串str1的内容 : 0x00415744
局部静态字符串str3的内容 : 0x0041573c
局部字符串str2的内容 : 0x004157b8
(4)堆区
动态分配的内存地址p: 0x00385ee8
(5)程序代码区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值