日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++内存的分区

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++内存的分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++內存分為四個區:

(1)代碼區:存放代碼轉譯成的二進制代碼。
(2)全局區:存放全局變量、靜態變量(static)、常量(如字符串常量)。 全局區中還包含一個常量區,用于存儲常量(字符串、全局const)。局部const修飾的常量在棧區。
(3)棧區:存放局部變量、函數的參數等。
(4)堆區:程序員自己開辟(new)、釋放(delete)。(這么說其實不準確,因為嚴格意義上,C中通過malloc和free開辟的空間是堆,C++中new和free開辟的空間是自由存儲區)。

?
C++編譯通過后生成exe可執行文件,在文件運行前,只有兩個區:
(1)代碼區:存放 CPU 執行的機器指令。代碼區共享且只讀。
(2)全局區:存放全局變量,靜態變量、字符串常量、局部常量。

#include <iostream>
using namespace std;int a1 = 10;  // 全局變量,全局區
const int a2 = 10; // 全局常量,全局區
int main(int argc,char** argv)
{int a3 = 10; // 局部變量,棧區const int a4 = 10; // 局部常量,棧區static int a5 = 10; // 靜態變量,全局區string a6 = "123"; // 字符串常量,全局區int* a7 = new int(10);// 堆區delete a7;return 0;
}

堆區和棧區的區別

(1)棧區由程序自動開辟和釋放,棧區由程序員開辟和釋放。如果程序員沒有釋放的話,程序會在結束時自動釋放。
(2)棧是一片連續的地址。而堆的地址不連續,是通過鏈表連接的,多次new和delete可能導致內存的泄露。
(3)棧是的內存是向低地址擴展,即棧頂地址和棧的最大容量由系統決定。如果申請的空間大于棧的空間,就會溢出。而堆是向高地址擴展,空閑內存是以鏈表的形式鏈接的,且鏈表的遍歷方向是由低地址向高地址的。
(4)棧的效率高于堆。

總結

以上是生活随笔為你收集整理的C++内存的分区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。