數據的內部存儲:大端法(0x12345678低位存儲在高位地址)小端法(0x12345678低 位存儲在低位地址)
C語言的存儲佈局——代碼段
是進程中最重要的一個段,是由CPU執行的指令部分。
C語言的存儲佈局——數據段and緩衝段
初始化數據段(.data)——包含程序中明確給定初值的全局變量和靜態變量
非初始化數據段(.bss)——未給定初值的全局變量and靜態變量。
程序運行時由內核干涉將段中未初始化的初始化爲0(NULL)
C語言的存儲佈局——棧
所有的自動變量以及函數調用需要保存的信息(返回地址,函數調用前各寄存器的
值)都存儲在棧上。(經典錯誤:將一個指向局部變量的指針作爲函數的返回值)
C語言的存儲佈局——堆 堆用於存儲用戶申請的內存空間,進行動態內存分配
#include <stdio.h>
#include <unistd.h>
int a1=1;//auto爲臨時變量,不能放在全局區
static int a2=2;
const int a3=3;
int main()
{
int b1 = 4;
static b2 = 5;
const b3 = 6;
int* p = malloc(4);
printf("a1:%p\n",&a1);
printf("a2:%p\n",&a2);
printf("a3:%p\n",&a3);
printf("b1:%p\n",&b1);
printf("b2:%p\n",&b2);
printf("p:%p\n",p1);
printf("main:%p",main);
}
任何程序的內存空間分成4個基本部分
1.代碼區 (全局常量,如const int a=5;並且a也爲全局變量,函數名)
2.全局棧區(靜態全局變量,普通全局變量,靜態局部變量)
3.堆 (內存分配)
4.局部棧(局部常量,局部變量)