首页 > 系统相关 >32bit的linux系统内存分布

32bit的linux系统内存分布

时间:2024-05-26 17:33:40浏览次数:33  
标签:初始化 释放 程序 存储 32bit 内存 linux 空间

32bit的linux系统内存分布

在32bit的linux系统,则每个运行的程序都会得到4G大小的内存空间,只不过每个程序得到的4G大小的内存都是虚拟内存,而物理内存才只有4G,物理内存是真实存在的,而虚拟内存是通过映射得到的。(如图所示一个程序有1M大小的物理内存,在运行之后会得到4G大小的虚拟内存空间。

img


1、代码段:(1).text段:用于存储用户程序生成的指令。

​ (2).init段:用于存储系统初始化的指令。

注意:这两部分的属性是只读的,在程序运行之后代码段中的数据就不应该再被修改。在程序运行之前 代码段的内存空间就已经被内核计算完成。


2、数据段:(1).rodata段:被称为只读常量区,程序中的常量(整型常量、字符串常量)都是存储在该区域,对于 该区域的属性是只读的,当程序结束后该区域的内存会被释放。

​ (2).data段:用于存储程序中的已经被初始化的全局变量已经被初始化的静态局部变量,另外注意初 始化的值不能为0!

​ (3).bss段:用于存储程序中未被初始化的全局变量以及未被初始化的静态局部变量以及初始化为0的 全局变量初始化为0的静态局部变量


3、堆内存:堆空间属于用户可以随意支配的内存,用户想要支配堆空间的内存的前提是需要向内核申请,可以通过库 函数malloc( )、calloc( )申请堆内存,注意堆空间需要用户手动申请以及手动进行释放,通过库函数free( )释放堆内存。堆内存属于匿名内存,只能通过指针访问!!!

注意由于堆空间是由用户进行支配,所以用户申请成功之后,使用完成后需要及时释放堆空间,并且必 须手动释放,并且必须只能释放一次,如果不释放,则会导致内存泄漏! 另外,当把申请的堆内 存释放之后,则应该同样把指向堆内存首地址的指针的地址指向NULL


4、栈空间:栈空间主要用于存储程序的命令行参数、局部变量、函数的参数值、函数的返回地址,当函数被调用期 间,内核会分配对应大小的栈空间给函数使用,当函数调用完成则栈空间就会内核释放。栈空间的内存存 储是随机值,所以用户得到栈空间之后,应该把变量进行初始化,目的是防止变量中存储的值是不确定 的。

注意Linux系统中栈空间的容量是有限的,如果超过容量,则会发生栈溢出,导致程序出现段错误


标签:初始化,释放,程序,存储,32bit,内存,linux,空间
From: https://www.cnblogs.com/lwj294/p/18214023

相关文章

  • Windows、Linux下,基于QT的打包方法
    整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考ps:第一次做Windows下打包,用了2小时,第二次20秒第一次做Linux(ubuntu)下打包,用了8小时,第二次1分半一、Windows有许多比较坑的帖子,会带新人走不少弯路,大家注意鉴别(没方法,随缘)1、首先,找到......
  • Linux安装Anaconda
    清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载好安装bashAnaconda3-2020.07-Linux-x86_64.sh空格之后yes安装环境变量重新连接......
  • linux核心基础-权限管理
    1、更改文件的权限命令总结2、文件、目录的的rwx想要删除文件,要看是否有该文件所在目录,目录是否有w权限,才可以删除文件,且还得有x权限,才能进入文件夹。(用普通用户测试)3、环境变量1、env和set命令env命令为单个用户的环境变量命令为系统整体的环境变量[root@muserver1etc]......
  • 【操作系统】内存管理概述
    目录内存管理硬件结构早期内存的使用方法分段分页逻辑地址,线性地址(intel架构)虚拟地址物理地址结构图虚拟地址到物理地址的转换内存管理总览系统调用vm_area_struct缺页中断伙伴系统slab分配器页面回收反向映射KSMhugepage页迁移内存规整OOM内存管理的一些数据结构线性映射struct......
  • OneForall工具的下载安装和使用(Windows和Linux)
    目录OneForall的介绍OneForall的下载OneForall的安装安装要求安装步骤(git版)安装(kali)OneForall的使用命令在Windows在Linux(kali)OneForall的结果说明免责声明本文所提供的文字和信息仅供学习和研究使用,请读者自觉遵守法律法规,不得利用本文所提供的信息从事任何违......
  • linux 死锁排查以及线程信息打印
     脚本名称,gstack.sh#!/bin/shiftest$#-ne1;thenecho"Usage:`basename$0.sh`<process-id>"1>&2exit1fiiftest!-r/proc/$1;thenecho"Process$1notfound."1>&2exit1fi#GDBdoesn&#......
  • C和C++内存管理
    C和C++的内存管理C/C++中程序内存区域的划分C语言中动态内存管理方式C++中动态内存管理方式new和delete操作内置类型new和delete操作自定义类型operratornew函数和operatordelete函数new和delete的实现原理内置类型自定义类型new的原理delete的原理newT[N]的原理dele......
  • DDR(Double Data Rate)内存技术经历了几个主要的发展阶段,每个阶段都带来了新的技术和性
    DDR(DoubleDataRate)内存技术经历了几个主要的发展阶段,每个阶段都带来了新的技术和性能改进。以下是DDR内存技术的发展阶段:DDR1:DDR1内存于2000年首次推出,它是第一个双倍数据传输速率的内存标准。DDR1内存的数据传输速率是SDRAM的两倍,从而提供了更高的内存带宽和性能。DDR2:DD......
  • Debian/Linux网络配置全面指南:从静态IP到DNS设置
    在Debian/Linux上配置网络涉及多个步骤,包括设置静态IP地址、配置网关和DNS服务器等。以下是一个详细的教程,指导你如何在Debian/Linux系统上进行网络配置。1.编辑网络接口配置文件在Debian/Linux上,网络接口的配置文件通常位于/etc/network/interfaces。首先,以超级用户身份......
  • 【Linux】为 VMware 的 Linux 系统(CentOS 7)设置静态IP地址
    文章目录准备工作查看子网掩码和网关IP确认准备设置的虚拟机端口没有被占用调整设置编辑配置文件配置文件说明完成配置,准备测试使用命令终端连接服务器我是一名立志把细节说清楚的博主,欢迎【关注】......