C程序内存管理

C程序内存分配

对于一个C语言可执行程序,内存主要由以下4部分组成:

  • 代码区:存放可执行代码
  • 静态存储区:存放全局变量,静态变量,常量字符串
  • 栈:局部变量,函数形参
  • 连续的内存的区域,向低地址扩展,;
  • 栈的最大空间固定,超出则引起栈溢出,stack overflow;
  • 变量离开作用域后,先进后出,栈上的内存会自动释放。
  • 堆:手动申请和释放,malloc与free
  • 不连续的内存区域,向高地址扩展
  • 内存泄漏
  • 内存碎片
C程序内存分配

常见变量类型内存

char short int long float double 指针
32位编译器 1 2 4 4 4 8 4
64位编译器 1 2 8 4 4 8 8

struct内存对齐

提高访问效率,造成空间浪费

  • 结构体的每一个成员起始地址必须是自身类型大小整数倍
  • 结构体内所有数据成员各自内存对齐后,结构体本身还要进行一次内存对齐,结构体大小必须是结构体占用最大字节数成员整数倍
struct A{
    char a;
    int b;
    short c;
};  //12字节
struct B{
    short c;
    char a;
    int b;
}; //8字节
内存对齐
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容