C++之內存分區(qū)的實現(xiàn)示例
C++程序在執(zhí)行時,將內存大方向劃分為4個區(qū)域
1.代碼區(qū):存放函數(shù)體的二進制代碼,由操作系統(tǒng)進行管理;
2.全局區(qū):存放全局變量和靜態(tài)變量以及常量;
3.棧區(qū):由編譯器自動分配釋放, 存放函數(shù)的參數(shù)值,局部變量等;
4.堆區(qū):由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統(tǒng)回收。
C++中主要利用new在堆區(qū)開辟內存,堆區(qū)開辟的數(shù)據,由程序員手動開辟,手動釋放,釋放利用操作符 delete。
利用new創(chuàng)建的數(shù)據,會返回該數(shù)據對應的類型的指針
例如:
int* func()//返回int指針的函數(shù)
{
int* a = new int(10);
return a;
}
int main() {
int *p = func();
cout << *p << endl;
//利用delete釋放堆區(qū)數(shù)據
delete p;//要記得釋放??!
//cout << *p << endl; //報錯,釋放的空間不可訪問
system("pause");
return 0;
}
new的釋放:
delete p;//p不是數(shù)組變量 delete[] p;//p是數(shù)組
棧區(qū)的數(shù)據由編譯器釋放,因此函數(shù)中的局部變量不能作為地址或者引用返回
//錯誤示范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;
}
//錯誤示范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;
}到此這篇關于C++之內存分區(qū)的實現(xiàn)示例的文章就介紹到這了,更多相關C++ 內存分區(qū)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)簡單的希爾排序Shell Sort實例
這篇文章主要介紹了C++實現(xiàn)簡單的希爾排序Shell Sort實例,對于正在學習算法的朋友很有借鑒價值,需要的朋友可以參考下2014-07-07
visual?studio?2022?編譯出來的文件被刪除并監(jiān)視目錄中的文件變更(示例詳解)
這篇文章主要介紹了visual?studio?2022?編譯出來的文件被刪除?并監(jiān)視目錄中的文件變更,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08

