詳細介紹了C / C ++程序中的內存分配原理,重點介紹了堆內存和堆棧內存之間的區別。
C / C ++程序中的致命內存分配問題是否曾經定義過這樣的變量:int a [50] ;?您可能會說這是一個普通的代碼。那么int a [1000000];呢? int a [512] [512];關于什么?使用VC這么長時間后,直到今天我才意識到自己還沒有弄清最基本的東西。請參閱下面的這篇文章:
一、知識程序的初步內存分配
C / C ++編譯程序占用的內存分為以下幾部分:
1、堆棧區域(堆棧),由編譯器自動分配和釋放,用于存儲函數參數值,局部變量值等。其操作類似于數據結構中的堆棧。
2、堆區域(堆)通常由程序員分配和釋放,如果程序員不釋放,則程序結束時操作系統可能會回收它。請注意,它與數據結構中的堆不同,并且分配方法類似于鏈表,哈哈。
3、全局區域(靜態區域)(靜態)-全局變量和靜態變量存儲在一起,初始化的全局變量和靜態變量位于一個區域,未初始化的全局變量和未初始化。靜態變量位于另一相鄰區域。程序結束后由系統釋放。
4、文本常量區域常量字符串放置在此處。程序結束后由系統釋放。
5、程序代碼區域-存儲功能主體的二進制代碼。
二、示例
// main.cpp
#include
#include
int a = 0; //全局初始化區域
字符* p1; //全局未初始化區域
void main()
{
int b; //堆棧
char s [] =“ abc”; //堆棧
char * p2; //堆棧
char * p3 =“ 123456”; // 123456 \ 0在常量區域中,而p3在堆棧中。 static int c = 0; //全局(靜態)初始化區域
p1 =(char *)malloc(10);
p2 =(char *)malloc(20);
//分配的10和20個字節的區域在堆區域中。
strcpy(p1,“ 123456”);
// 123456 \ 0放在常量區域中,編譯器可以對其進行優化,并將p3指向的“ 123456”放在一個位置。
free(p1);
free(p2);
}
本文來自電腦雜談,轉載請注明本文網址:
http://www.nblvzhiyuan.com/a/shoujiruanjian/article-341405-1.html
人均GDP和收入看起來你好富啊