linux--环境变量(linux进程内存管理)

数据的内部存储
大端:低地址存高位数
小端:高地址存高位数
代码段
一个程序多数情况下是不需要更改自身代码的,只有一种情况例外,就是一些长时间运行的升级程序。(另一种解决方案为采用共享库的形式)。
数据段
包含程序中明确给定初值的全局变量和静态变量。
缓冲段
通常是没有明确给定初值的全局变量和静态变量。

所有的自动变量和函数调用时所需要保存的信息(返回地址,函数调用前个寄存器的值等)都存储在栈上。
栈随着函数的调用而生长,随着函数调用结束而消亡。
自动变量的3种存储方式:
存储在数据段(给定初始值的全局变量和静态变量)或者bass段(没给定初值的全局变量和静态变量,静态局部变量);
存储在寄存器(寄存器变量)
存储在栈中(一般变量,如局部变量)
注意:c语言编程中,一种典型的错误就是将一个指向局部变量的指针作为函数的返回值返回。

堆用于存储用户申请的内存空间,通常在堆中进行动态内存分配。
操作系统为程序分配的是虚拟地址,而不是物理地址。
操作系统的内存分页管理机制:首先我们知道,每个动态运行的程序就是进程,操作系统为每个进程维护了一个页表。页表给出了该进程的每一页对应的帧的位置。页表记录了这个进程的很多页,很多页构成了这个进程,将这个进程分成很多页的作用就是能够在物理内存上可以不连续存储,但在逻辑上是连续连续存储。对应的,一个进程被分为很多页,内存地址被分为很多帧。这样,根据给出的逻辑地址(页号和偏移量)通过处理器产生物理地址(帧号和偏移量)。
常量的存储
如“c”,1234,这些简单常量,是存储在程序的代码段中 。
但是对于“aasdfmaaf”这种太长的字符串,会将其存储在。rodata段中,但在该段的地址会转换为一个简单变量存储在程序的代码段中。
总结:
栈是动态的,存储的一般是一些自动变量,会调用函数,并且会消长。
堆是动态分配的内存,但分配到的内存地址为虚拟地址。
.data段存储被初始化后的静态变量和全局变量。
.bass段通常存储未被初始化的静态变量和全局变量。
代码段存储的是指令集和一些常量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值