博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言内存分配
阅读量:6223 次
发布时间:2019-06-21

本文共 940 字,大约阅读时间需要 3 分钟。

 

(1)代码区(text segment)。存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的 (即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关 信息。

(2)全局初始化数据区/静态数据区(initialized data segment/data segment)。该区包含了在程序中明确被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。
 
(3)未初始化数据区。亦称BSS区(uninitialized data segment),存入的是全局未初始化变量。BSS这个叫法是根据一个早期的汇编运算符而来,这个汇编运算符标志着一个块的开始。BSS区的数据在程序开始执行之前被内核初始化为0或者空指针(NULL)。
 
(4)常量区。
常量字符串就存在这里。
 
(5)栈区(stack)。由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结 构中的栈。每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储 到栈区。然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间,这就是C实现函数递归调 用的方法。每执行一次递归函数调用,一个新的栈框架就会被使用,这样这个新实例栈里的变量就不会和该 函数的另一个实例栈里面的变量混淆。

(5)堆区(heap)。用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。(malloc free()总是一起用)。

(6)命令参数行。int main(int argc,char *argv[]),在这里argc由系统自动实现赋值,不需我们自己赋值,它包括 了. /a.out 和 输入参数的个数和,argv[0] 是 ./a.out argv[1] 是输入的第一个参数...
 
 
 

转载于:https://www.cnblogs.com/zhaihongliangblogger/p/6171366.html

你可能感兴趣的文章
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException
查看>>
iOS 实现一个截图分享的功能
查看>>
molicode生成工程代码实战
查看>>
Hessian学习
查看>>
虚地址到物理地址的转换过程
查看>>
为什么SQL Server函数isdate与cast同时使用报错?
查看>>
Jafka源码粗略解读之一
查看>>
Windows 7 - folder options / single-click or double-click
查看>>
IP分组格式
查看>>
Cocos2d策略类塔防精品手游-MiniTD独家完整源码
查看>>
怎么样和老师学英语呀?
查看>>
【小松教你手游开发】【unity实用技能】unity在游戏中更换角色的shader,比如加个流光...
查看>>
一个脚本实现Mysql的备份
查看>>
内核源码研读预备知识
查看>>
linux 双网卡共享网络
查看>>
CentOS6.5下安装配置VNC
查看>>
javascript成神之路(2):深入理解原型以及原型链的重要性
查看>>
针对WPF开发的报表工具控件Stimulsoft Reports.Wpf
查看>>
电商改变了我们什么?
查看>>
JavaScript之数组Array
查看>>