C变量区域
创始人
2024-06-01 16:11:23

C语言中有五大内存分区,分别是栈区、堆区、全局区/静态区、常量区和代码区。

1.栈区:由编译器自动分配释放,存放函数的参数值、局部变量的值等。当调用函数的时候函数中定义的变量会被加到栈中,当函数离开的时候,被添加的变量会从栈中移除,栈在最高的地址上,所以添加的变量地址会逐渐变小,里面的内容可读可写。

2.堆区:一般由程序员分配和释放内存空间,例如我们在使用链表申请节点内存时,malloc函数申请的内存就是堆区的内存空间,使用完后要用free函数释放空间。里面的内容可读可写。

3.全局区/静态区:全局变量和静态变量就存放在这里,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 是由系统管理的可读可写的内存。

4.常量区:该内存区存放的常量,数字常量、字符常量、字符串常量等,不允许修改,所以常量区的内存是只读的。

  1. 代码区:存放程序的二进制代码,代码区的内容也是只读型。

====补充题外话

刚好看到了函数参数中有指针常量,忘了是怎么回事了。查了下记录一下

1.const int *p int const *p

本质是一样的 p 改变,但是 *p 不可以改变 即指针指向的值不可以改变,一般用来做对入参的限制,不让入参被改变。 fun(const int *p,int a):入参不可以被改变

2. int *const p

p 不可以改变,*p可以改变,p指向的地址不可以改变,但是*p的内容可以改变

相关内容

热门资讯

粤港澳大湾区ETF净值下跌3.... 平安中证粤港澳大湾区发展主题交易型开放式指数证券投资基金(简称:粤港澳大湾区ETF,代码512970...
华夏中证5G通信主题ETF净值... 华夏中证5G通信主题交易型开放式指数证券投资基金(简称:华夏中证5G通信主题ETF,代码515050...
前海开源中证500等权ETF净... 前海开源中证500等权重交易型开放式指数证券投资基金(简称:前海开源中证500等权ETF,代码515...
国泰中证细分化工产业主题ETF... 国泰中证细分化工产业主题交易型开放式指数证券投资基金(简称:国泰中证细分化工产业主题ETF,代码51...
易方达中证智能电动汽车ETF净... 易方达中证智能电动汽车交易型开放式指数证券投资基金(简称:易方达中证智能电动汽车ETF,代码5165...