c/c++的內存分配

用樣例代碼說明內存分配 程序員

 

/*
 * 棧區(stack):
 *      存放函數的參數值、局部變量的值等 
 *      由編譯器自動分配和釋放
 *      其操做方式相似於數據結構中的棧
 * 堆區(heap):
 *      通常由程序員分配和釋放,若程序員不釋放,程序結束時可能由操做系統回收
 *      分配方式相似於鏈表
 *      注意它與數據結構中的堆是兩回事 
 * 全局區(靜態區)(static):
 *      全局變量和靜態變量的存儲是放在一塊兒的
 *      初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另外一塊區域
 *      程序結束後由系統釋放
 * 文字常量區:
 *      常量字符串就是放在這裏
 *      程序結束後由系統釋放
 * 程序代碼區:
 *      存放函數體的二進制代碼
*/

#include <stdlib.h> #include <stdio.h> #include <string.h> int a = 0; //全局初始化區 char *p1; //全局未初始化區 int main() { int b; // char s[] = "abc"; // char *p2; // const char *p3 = "123456"; //123456在常量區, p3 在棧上 static int c = 0; //全局(靜態)初始化區 p1 = (char*)malloc(10); //分配的10字節的區域中堆區 p2 = (char*)malloc(20); //分配的20字節的區域中堆區 strcpy(p1, "123456"); //123456在常量區,編譯器可能優化與 p3 指向的同一位置 }
相關文章
相關標籤/搜索