C++之內(nèi)存分區(qū)的實(shí)現(xiàn)示例
C++程序在執(zhí)行時(shí),將內(nèi)存大方向劃分為4個(gè)區(qū)域
1.代碼區(qū):存放函數(shù)體的二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理;
2.全局區(qū):存放全局變量和靜態(tài)變量以及常量;
3.棧區(qū):由編譯器自動(dòng)分配釋放, 存放函數(shù)的參數(shù)值,局部變量等;
4.堆區(qū):由程序員分配和釋放,若程序員不釋放,程序結(jié)束時(shí)由操作系統(tǒng)回收。
C++中主要利用new在堆區(qū)開(kāi)辟內(nèi)存,堆區(qū)開(kāi)辟的數(shù)據(jù),由程序員手動(dòng)開(kāi)辟,手動(dòng)釋放,釋放利用操作符 delete。
利用new創(chuàng)建的數(shù)據(jù),會(huì)返回該數(shù)據(jù)對(duì)應(yīng)的類型的指針
例如:
int* func()//返回int指針的函數(shù)
{
int* a = new int(10);
return a;
}
int main() {
int *p = func();
cout << *p << endl;
//利用delete釋放堆區(qū)數(shù)據(jù)
delete p;//要記得釋放??!
//cout << *p << endl; //報(bào)錯(cuò),釋放的空間不可訪問(wèn)
system("pause");
return 0;
}
new的釋放:
delete p;//p不是數(shù)組變量 delete[] p;//p是數(shù)組
棧區(qū)的數(shù)據(jù)由編譯器釋放,因此函數(shù)中的局部變量不能作為地址或者引用返回
//錯(cuò)誤示范1:
int * func()
{
int a = 10;
//若是用static把局部變量變?yōu)殪o態(tài)變量,則可以用
//static int a =10;
return &a;
}
int main() {
int *p = func();
cout << *p << endl;
system("pause");
return 0;
}
//錯(cuò)誤示范2:
/返回局部變量引用
int& test01() {
int a = 10; //局部變量
//若是用static把局部變量變?yōu)殪o態(tài)變量,則可以用
//static int a =10;
return a;
}
int main()
{
//不能返回局部變量的引用
int& ref = test01();
cout << "ref = " << ref << endl;
}
正確使用函數(shù)中局部變量作為值返回
例如:
#include <iostream>
using namespace std;
int test01() {
int a = 10; //局部變量
return a;
}
int main() {
int ref = test01();
cout << "ref = " << ref << endl;
}到此這篇關(guān)于C++之內(nèi)存分區(qū)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++ 內(nèi)存分區(qū)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++使用宏函數(shù)實(shí)現(xiàn)單例模板詳解
在我們?nèi)粘i_(kāi)發(fā)中,無(wú)可避免需要使用單例模式進(jìn)行設(shè)計(jì)類對(duì)象。這篇文章主要介紹了如何使用宏函數(shù)實(shí)現(xiàn)單例模板,感興趣的小伙伴可以了解一下2023-02-02
C++使用opencv調(diào)用級(jí)聯(lián)分類器來(lái)識(shí)別目標(biāo)物體的詳細(xì)流程
所謂級(jí)聯(lián)分類器其實(shí)就是把分類器按照一定的順序聯(lián)合到一起,下面這篇文章主要給大家介紹了關(guān)于C++使用opencv調(diào)用級(jí)聯(lián)分類器來(lái)識(shí)別目標(biāo)物體的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
Qt之實(shí)現(xiàn)圓形進(jìn)度條的示例代碼
在平時(shí)做頁(yè)面開(kāi)發(fā)時(shí),有些時(shí)候會(huì)用到圓形進(jìn)度條,本文主要介紹了Qt之實(shí)現(xiàn)圓形進(jìn)度條的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
C++遍歷磁盤(pán)驅(qū)動(dòng)器的示例代碼
這篇文章主要介紹了C++遍歷磁盤(pán)驅(qū)動(dòng)器的示例代碼,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下2021-01-01

