C程序在内存中的分区情况

来源:互联网 发布:佛道 知乎 编辑:程序博客网 时间:2024/05/10 04:12

当程序被加载到内存前被组织成三部分:

一、代码区

二、静态存储区

三、动态存储区


1) 代码区

这是将要执行程序的机器语言表示(是计算器能识别的二进制表示)

2)静态存储区

这段内存区是程序在编译和连接时分配。

主要存放的变量是:全局变量(global)、静态的变量(static修饰的)。

这段内存区按照是否初始化过 被分为:已初始化的数据和未初始化的数据(即是BSS段,默认为0)

3)动态存储区

这段内存区在程序的调用和执行时分配,主要存放一些动态分配的变量等。

又分为:堆区(heap)和栈区(stack)。

堆区:通过malloc分配的内存区。

栈区:存放的是局部变量和函数的形参等。


常常细分:

     代码区

     全局变量与静态变量区
     局部变量区,即栈区
     动态存储区,即堆区。

     全局变量区变量定义main函数的外面。
                变量的生存周期:程序运行结束
                变量的使用范围:对整个文件有效

     静态区static 修饰的变量变量的生存周期程序运行结束,变量的使用范围,一种在函数内部使用 static ,那么它的范围就在函数内部有效(即为生存期问题,保存上一次执行结果的值),另外一种 在main函数外面使用static,那么它的作用范围就当前文件有效,其他的文件不能范问(即为作用域问题)。
                 
   栈区局部变量所申请的区域局部变量在函数调用时,申请空间,在函数结束时,释放空间。它的使用范围一般在函数内部。

    堆区malloc 申请的变量,手动申请,手动释放

【7】动态内存的申请
     void *malloc(size_t size);
     功能:申请一段内存空间(堆区)
     参数:size  申请内存空间的大小。
     返回值:成功 返回所申请空间的首地址,出错 NULL

      void free(void *ptr);
     功能:释放申请的内存空间
     参数:要释放空间的首地址
     返回值:无















0 0
原创粉丝点击