欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++之內(nèi)存分區(qū)的實(shí)現(xiàn)示例

 更新時(shí)間:2024年03月25日 16:28:52   作者:wszswllnzn_  
本文主要介紹了C++之內(nèi)存分區(qū)的實(shí)現(xiàn)示例,主要包含了4個(gè)區(qū)域,分為代碼區(qū),全局區(qū),棧區(qū)和堆區(qū),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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)的類(lèi)型的指針

例如:

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)文章

最新評(píng)論