数据的内部存储:大端法(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);
}
查看进程内存管理:
通过查看maps可得到结论:
任何程序的内存空间分成4个基本部分
1.代码区 (全局常量,如const int a=5;并且a也为全局变量,函数名)
2.全局栈区(静态全局变量,普通全局变量,静态局部变量)
3.堆 (内存分配)
4.局部栈(局部常量,局部变量)
任何程序的内存空间分成4个基本部分
1.代码区 (全局常量,如const int a=5;并且a也为全局变量,函数名)
2.全局栈区(静态全局变量,普通全局变量,静态局部变量)
3.堆 (内存分配)
4.局部栈(局部常量,局部变量)