C语言 内存分区

打印 上一主题 下一主题

主题 983|帖子 983|积分 2949

C语言对内存的使用划分为以下区域:

栈区(stack)、堆区(heap)、全局区(静态区)、常量区、代码区。

  • 栈区

    • 由编译器自动分配释放,按内存地址从高(地址)到低(地址)存储;
    • 栈区内容的作用域为其所定义的函数内,生命周期为函数执行期间,函数结束自动释放;
    • 存放局部变量const局部变量、函数调用时的入口参数返回值
    • 栈区内容先进后出;

  • 堆区

    • 堆区内存由程序员管理,堆区空间申请后使用(申请时注意保存地址,防止内存泄漏),用完后一定及时手动释放,防止内存泄漏;
    • 堆区存储由低地址向高地址存储,内容可读可写;
    • 申请方法:
    void *malloc(size_t size);
    void free(void *ptr);
    void *calloc(size_t nmemb, size_t size);
    void *realloc(void *ptr, size_t size);

  • 全局(静态)区

    • 由系统管理,全局(静态)区内容的生命周期为整个程序运行期间;
    • 存放全局变量和static修饰的静态变量(包括静态全局变量静态局部变量);初始化的放在一块,未初始化的放在一块;
    • 全局变量和静态全局变量的作用域均为全局,但其他源文件可以通过extern关键字声明之后引用全局变量,而不能引用静态全局变量
    • 静态局部变量只在其定义函数内可见;

  • 常量区

    • 由系统管理,存放常量,const全局变量,只读;

  • 代码区

    • 由系统管理,存放程序的二进制代码,只读;


参考文章:
C语言:内存分配---栈区、堆区、全局区、常量区和代码区
c语言中的五种内存分区-笔记
c语言内存分区-(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表