用樣例代碼說明內存分配 程序員
/* * 棧區(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 指向的同一位置 }