程序内存分配

162 阅读1分钟

32位 一般只总线宽度(同时读取的位数),现代计算机一般总线和地址位数一致,早期计算机存在总线8位,地址位16位的情况

16位地址可寻址64k 32位可寻址4G

1m内存的实模式分段模型是怎么回事儿来着?

可用内存分段

由高到低为

stack

堆栈(或只称栈,翻译问题) 在汇编里的结构: (假装有图) 栈在汇编里并没有什么用.系统默认会将一些环境变量地址压如栈里,寻址一般通过esp偏移量计算 在汇编中调用时比较常用, (汇编调用c的执行过程) c库初始化->汇编(包含c函数调用)->c库结束

汇编执行前首先将ebp压栈,然后赋值ebp=esp,之后需要对剩余的神圣变量压栈. main函数实行结束后先反序出栈非ebp,esp的神圣变量,之后esp=ebp,出栈ebp. (esp,ebp,ebx,edi,esi) c语言保证这些寄存器值在函数外不发生变化

调用c函数时从右向左将参数压栈,执行结束后需要清理栈空间,恢复原状

.bss

block start by symbol 存放未初始化变量

.data

已初始化变量

.text

代码,以及包含的定义的已初始化变量

heap

应该是c语言新加的,存放main内动态分配的内存

参考

  1. 汇编语言,基于linux环境 2.汇编中bss,data,text,rodata,heap,stack段的作用