首页 > 系统相关 >linux——堆、栈、内存映射

linux——堆、栈、内存映射

时间:2023-04-18 14:46:16浏览次数:36  
标签:语言 映射 静态 Pasted image 内存 linux png 常量

C的虚拟内存区域划分

  1. Code Area(代码区):程序代码指令、常量字符串,只可读。
  2. Static Area(静态区、全局区):存放全局变量/常量、静态变量/常量。 该区域的大小在程序一加载进内存的时候就已固定,但是静态变量的值是可以改的。
  3. Heap(堆):由程序员控制,使用malloc/free来操作。(空间最大)
  4. Stack(栈):预先设定大小,自动分配与释放。
  5. 常量区

对于可执行程序而言,可以分为:

  1. Text段:代码段,就是放程序代码的,编译时确定,只读
  2. Data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写。也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存在这个区域
  3. Bss段:已经定义但没赋初值的全局变量和静态变量存放在这个区域。

![[Pasted image 84.png]]
![[Pasted image 85.png]]

堆的地址是向上延伸的
![[Pasted image 86.png]]

栈的地址是向下减小的
![[Pasted image 87.png]]
![[Pasted image 83.png]]

//注意:c语言的形参是从右到左入栈的,b先入栈,a后入栈;a先出栈,b后出栈。
int abc(int a, int b)   
{
}

因为c语言是底层语言,包括操作系统本身就是用c语言写的,所以呢,很多时候是这样的:用c语言来写一个库,再用其他语言来调用
但是呢,不能保证所有的语言都是从右到左入栈的。所以其他语言在调用c语言写的库的时候,要遵循c语言的规范。

优化、区别

  1. 栈的访问速度比堆快很多

原因:

  1. 栈的cache命中率高于堆,堆的内容被操作系统交换到外存的概率比栈大,栈一般是不会被交换出去的,
  2. 栈有专用寄存器支持,并有pop、push等专用汇编指令支持
  3. 堆的分配和释放要调用malloc、free函数,要花费时间且可能会造成内存碎片,而栈不需要这些工作
  4. 堆的访问需要先取得指针,再取得数据,而栈只需一次访问
  1. 栈内容在编译的时候已经确定
  2. 堆分配内存之后要与存储器之间建立映射
  3. 栈的空间只有几M~几十M,所以不可以申请大临时变量

标签:语言,映射,静态,Pasted,image,内存,linux,png,常量
From: https://www.cnblogs.com/lattelover/p/17329460.html

相关文章

  • Linux服务器怎么关闭防火墙
    Linux服务器怎么关闭防火墙在很多情况下,防火墙都会组织一些端口号的通讯。比如我们的tomcat,nginx,redis明明安装的没问题,但在外部就是访问不了,那很有可能就是防护墙的原因了。我是艾西,今天跟大家分享下Linux服务器怎么关闭防火墙一、重启后永久性生效:开启:chkconfigiptableson关闭:c......
  • Linux服务器怎么修改系统时间
    Linux服务器怎么修改系统时间linux服务器的系统时间,有的时候会产生误差,导致我们的程序出现一些延迟,或者其他的一些错误,那么怎么修改linux的系统时间呢?我是艾西,今天又是跟linux小白分享小知识的时间具体操作:我们一般使用“date-s”命令来修改Linux系统时间。比如将系统时间设定成......
  • Linux基础
    1、Linux目录结构1.1Linux系统的目录结构是一颗到撞树。Linux只有一个顶级目录,称之为:根目录Windows系统有多个顶级目录,即各个盘符在Linux系统中表示出现在开头的/表示:根目录出现在后面的/表示:层次关系1.2常见目录说明①./bin:存放常用命令(即二进制可执行程序)......
  • Linux服务器如何清除dns缓存
    DNS缓存是一个临时数据库,用于存储已解释的DNS查询信息。换句话说,每当你访问网站时,你的操作系统和网络浏览器都会保留域名和相应IP地址的记录。这消除对远程DNS服务器重复查询,并允许你的操作系统或浏览器快速解析网站的域名。但是在某些情况下,例如对网络问题进行故障排除或者在更改D......
  • Linux系统上如何禁用
    Linux系统上如何禁用为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。为了消除这种可能性,机构会限制和监测访问互联网,同时禁用我是艾西,今天我将聊聊三种不同的方法来禁用方法方法方法方法一、伪安装在本方法中,我们往配置文件......
  • telnet远程管理linux主机及Zlib、openssl、openssh升级1
    一、telent远程管理主机1.安装telent服务服务端:yuminstalltelnet-server-y#安装服务端useradddaipasswddai#创建lhj用户,设置lhj密码,密码有规则要求,大小写数字加符号,输2次即可客户端:yuminstalltelnet-y#安装客户端2.测试telent登录客户端:telnet192.......
  • Linux iwlist command All In One
    LinuxiwlistcommandAllInOnewifiscaniwlist#scanningforwirelessnetworks$sudoiwlistwlan0scan$sudoiwlistwlan0scan>wifi-scan.md$cat./wifi-scan.md|grepESSID$iwconfig#Linux/macOS$ifconfig#Windows$ipconfig#......
  • Linux环境安装Redis7
    大家好啊,最近在学redis,在虚拟机上安装花了不少时间,于是整理了一下详细的安装教程,有需要的小伙伴可以看看,避免踩坑!安装redis时虚拟机的前置条件我用的是centos7.6,这里默认大家都安好虚拟机了,如果没有安装的同学可以看我下一篇的博客......
  • Linux系统如何查看内核版本信息
    使用如下命令:cat/etc/os-release显示结果如下,系统内核不同,信息不同。......
  • Linux 与 Windows 之间的内网共享还有 samba 的一些小知识
    最近内网搞了个Linux当办公机,于是内网之间文件共享就成了问题。最近刚好搞了一下有一点小心得共享一下。Windows的文件共享方式我就不累述了,百度上有很多教程,无脑照做就行了。唯一需要注意的就是用户权限。如果你是用微软账号登陆的话,需要去找一下你的实际用户名是什么,有的时......