内存布局
C语言内存布局规律:
高
丨 局部变量
丨 局部变量
丨 动态申请的内存空间
丨 全局变量(未初始化)
丨 静态变量(未初始化)
丨 静态变量(初始化)
丨 全局变量(初始化)
丨 全局变量(初始化)
丨 字符串常量
丨 字符串常量
丨 函数
低
高
丨 命令行参数和环境变量
丨 一一一一一一一一一一
丨 栈
丨 -------------------------
丨 未使用的内存空间
丨 -------------------------
丨 堆
丨 一一一一一一一一一一
丨 bss段
丨 一一一一一一一一一一
丨 数据段
丨 一一一一一一一一一一
丨 代码段
低
代码段
指用来存放程序执行代码的一块内存区域,在运行前就已经确定,通常属于只读,也有可能包含一些只读的常数变量,例如字符串常量。
函数名是常量
数据段
通常存放已经初始化的全局变量和局部静态变量
BSS段
通常用来存放程序中未初始化的全局变量和局部静态变量,在程序运行前将自动初始化为0。
堆
用于存放进程运行中被动态分配的内存段,大小不固定,可以动态扩展或缩小
malloc等函数将内存动态添加到堆上
free等函数将内存从堆中剔除
栈
是函数执行的内存区域
通常和堆共享一片区域
存放局部变量,函数参数,函数返回值……
函数的参数入栈顺序是从右向左
堆和栈
发展方向:
堆和其他区段一样,都是从低地址向高地址发展
栈是由高地址向低地址发展
大端小端:
小端:一般常见的操作系统
大端:通讯协议
不同的应用程序存储方式也由区别
Adobe PS -- 大端
BMP -- 小端
GIF -- 小端
JPEG -- 大端
MacPaint -- 大端
RTF -- 小端
大端:正序——高位放在前侧(低地址),低位放在后侧(高地址)
小端:逆序——高位放在后侧(高地址),低位放在前侧(低地址)