C语言-内存四区加强

栈区 :卡cpu、系统自动分配和释放、
变量都是在栈区的、栈区很小、例如:在32位操作系统下上限是:1M
如:double a[1024*128] 分配 1M 栈内存。
堆区 :卡内存、开发人员手动管理、
malloc calloc realloc 开辟的内存都在堆区
free释放内存、可以疯狂扩张到很大、一般 G 级别。
--------------------------------------------------------------------------------------
code area :程序代码指令、常量字符串、只可读(针对程序本身而言、可通过调试技术修改)。
define flag 10 //在代码区
char *p = "abcdef";//在代码区
printf("%d,%d\n", sizeof(p), sizeof("abcdef"));
printf("\n%p", &p);// 查看指针变量的地址
printf("\n%p", p);// 查看字符串的地址
*p = "abc"// 错误的做法、字符串常量在代码区、不可写 ; 写入位置 0x000F5860 时发生访问冲突。
char str[10] = "aaa";// 在栈区、可读可写  
p = str;
printf("\n %p %p", p, str);
*p = 98;
printf("\n %s", p); // 结果:baa   

--------------------------------------------------------------------------------------
static area :存放全局变量/常量、静态变量/常量。
 static可修饰局部变量、全局变量、表示只初始化分配一次、
直到程序运行结束才释放。
 const修饰的局部变量在栈区、修饰的全局变量在静态区。
 
 static 修饰的全局变量的作用域只在当前文件模块儿有效。
--------------------------------------------------------------------------------------
heap : 由开发人员控制、使用 malloc calloc realloc 、free 来操作。

--------------------------------------------------------------------------------------

stack :预先设定大小、自动分配与释放。
函数参数、局部变量、return 都在栈区、定长数组也在栈区   。
--------------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值