【C++ grammar】C++简化内存模型
1、stack(棧)
編譯器自動(dòng)分配內(nèi)存(函數(shù)內(nèi)部定義得局部變量、形參)
2、堆(Heap)
一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收(new和delete)
3、Global\Static(全局區(qū)、靜態(tài)區(qū))
1、全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊兒的
2、可以簡(jiǎn)單認(rèn)為:程序啟動(dòng)全局/靜態(tài)變量就在此處、程序結(jié)束釋放
4、Constant(常量區(qū))
可以理解為所有常量都放在一起,該區(qū)域內(nèi)容不可修改、
c++內(nèi)存示例:
堆向高地址方向生長(zhǎng)
棧向低地址方向生長(zhǎng)
所以中間的空白區(qū)域會(huì)由兩者共享,增大了內(nèi)存的利用效率。
觀察變量存放位置;
問(wèn)題:
下面哪個(gè)語(yǔ)句可以接在const char* p = “Hello”;后面:
1、p[0]=‘A’
2、p = “World”;
3、cin>>p
4、*(p+1)=‘e’
1和4共同的問(wèn)題:表達(dá)式必須是可以修改的左值
運(yùn)算符的左邊應(yīng)該是一個(gè)“左值”。所謂“左值”就是指在程序中占用內(nèi)存空間、可以被修改的量,比如各種變量。
‘’A‘’是一個(gè)字符串常量,他一經(jīng)定義系統(tǒng)就會(huì)分配一段地址給他(常量區(qū))式子左邊p[0]也是一個(gè)常量地址,所以不能用 = 將一個(gè)常量地址賦值給一個(gè)常量地址。這也就能回答問(wèn)題:表達(dá)式必須是可修改的左值的答案,因?yàn)閜[0]也是一個(gè)常量地址。
3、符號(hào)方向反了
關(guān)于1、4問(wèn)題的詳細(xì)解釋看這篇文章:
C語(yǔ)言中字符串賦值處理方式
雙引號(hào)做了3件事:
1.申請(qǐng)了空間(在常量區(qū)),存放了字符串
2. 在字符串尾加上了’/0’
3.返回地址
這里就是 返回的地址 賦值給了 p
總結(jié)
以上是生活随笔為你收集整理的【C++ grammar】C++简化内存模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: “能屯复能跃”上一句是什么
- 下一篇: 王者荣耀如何输入编码替换阵容