内存区域分配

内存区域分为:堆、栈、全局/静态存储区和常量存储区

注:常量放在常量存储区,不被修改

(1)堆:由程序员调用系统内存函数分配的内存块,根据需要动态分配,由程序员管理,编辑器不会释放。

(2)栈:在需要时候由系统分配,在不需要时候自动清除的变量存储区。通常是局部变量、函数参数等。编辑器时刻分配

(3)局部/静态变量:

例子:变量和函数参数都在——栈

void foo(void)

{

       int x=3;

       printf("\n%d",x);

}

//定义函数,当被调用时,系统根据函数的定义,将变量x在栈上分配了一块4字节的内存。x的生存期是foo函数的生存期,当“}”结束后,x栈上分配的内存区域对于x来说已经无效了,x也不再存在。(其中赋初值步骤:a.编辑器添加一个变量名到变量符号表中,b.编辑器在栈内存中分配一个4字节的内存块。c.编辑器在变量符号表中关联刚分配的内存块首地址和变量名,d.运行时,执行到这条语句,将初值3填入到分配的内存块中。)如果仅仅声明变量如int ;不会分配内存

 

例子:

#include<stdio.h>

void main(void)

{

       intx;

       inty;

       x=0x76543210; 

       y=0xfedcba98; 

       printf("\n%x",&y);    //输出 y的地址

       printf("\n%d,%d",x,y);//输出想,y十进制的数值

}

  该例子中,x可以拆分成0x76,0x54,0x32,0x10,假设x在内存中的起始地址为2000(自动分配),则:

 printf("\n%x",&y);  这句为取y地址,输出为y的地址,即:18ff40

调试过程:在printf("\n%x",&y);按F9设置断点,按F5调试运行,则输出18ff40(此时可以在调试工具merry中输入该地址,可以看到y的数值),再按F5则输出xy的十进制值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值