C++内存分区模型

内存分区模型

程序运行前有两个区

1.代码区

在内存中存放二进制代码,生成二进制文件,只读(防止被修改)

2.全局区

全局变量 静态变量 常量存放在此,在程序结束后由操作系统释放


int main()

{

    //创建普通局部变量

    int a=10;

    int b=10;

    cout<<"局部变量a的地址为:"<<(int)&a<<endl;

    cout<<"局部变量b的地址为:"<<(int)&b<<endl;

    return 0;

}


//全局变量

int g_a=10;

int g_b=10;

int main()

{

    //创建普通局部变量

    int a=10;

    int b=10;

    cout<<"局部变量a的地址为:"<<(int)&a<<endl;

    cout<<"局部变量b的地址为:"<<(int)&b<<endl;

    cout<<"全局变量g_a的地址为:"<<(int)&g_a<<endl;

    cout<<"全局变量g_b的地址为:"<<(int)&g_b<<endl;

    return 0;

}

效果如图:

image.png

局部变量和全局变量的地址不在一个段里

静态变量


static int s_a=10;

static int s_b=10;

效果如图,全局变量和静态变量的地址很近

image.png

常量、字符串常量也跟静态变量和局部变量的内存地址很近

const 修饰的变量

1.const 修饰的全局变量


const int c_g_a=10;

const int c_g_b=10;

int main(){}

2.const 修饰的局部变量


int main()

{

    const int c_l_a=10;

    const int c_l_b=10;

}

效果如图

image.png

所以局部变量和const修饰的局部变量(局部常量)不在全局区

全局变量、静态变量(static关键字)、常量(字符串常量和const修饰的全局常量)

程序运行后的区域

1.栈区

编译器自动分配释放,存放函数的参数值、局部变量等

在代码编写中不要返回局部变量的地址,因为栈区的数据由编译器释放


int * func(int b)

{

b=100;形参数据也会放在栈区u

int a =10;//局部变量  存放在栈区 栈区的shu

return &a;//返回局部变量地址

}

int main()

{

int *p=func();

cout<<*p<<endl;//第一次可以打印正确的数字是因为编译器做了一个保留

cout<<*p<<endl;

}

效果如图

image.png

第一次能返回,第二次不能,因为编译器做了一个保留,所以尽量不要返回局部变量的地址,但不管对错都是误操作!因为内存已经被释放了

2.堆区

由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

在c++主要利用new在堆区开放内存


int * func()

{

//利用new关键字,可以将数据开辟到堆区

//指针本质也是局部变量,放在栈上,指针保存的数据放在堆区,所以返回p而不是*p

int *p = new int (10);//new函数返回地址,所以用指针接收

int a=10;

return p;//我不释放,p一直存在,不管打印机次

}

int main()

{

int *p=func();

return 0;

cout<<*p<<endl;//能够成功输出10

}

原理如图

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356