【linux】进程存储管理
看《Linux高级程序设计》的笔记
设有一个hello的可执行文件
①显示该文件的基本信息
ls hello -l

②文件基本情况
file hello

③列出文件的存储区域情况
size hello

text(代码区): 存放代码和有const修饰的变量和字符串常量。
data(静态数据/全局初始化数据区):存放已经被初始化的全局变量和静态变量(有const修饰的除外)。
bss(未初始化数据区):存放未初始化的全局变量和静态变量。
dec(十进制总和)/hex(十六进制总和):总大小
全局变量的声明和使用:
方法① 在头文件中定义了全局变量:其他文件通过引用头文件使用该变量。
方法② 在源文件中定义了全局变量: 其他文件通过extern关键字来访问。
字符串常量:
如果在同一个文件中有char * a = "hello", char * b = "hello", char * c = "hello" 则这三个指针会指向同一个存储区,即只有一个”hello"字符串常量。
如果在文件1中有char * a = "hello", 文件2中有char * b = "hello", 这两个指针指向不同的存储空间,即每个文件都有一个“hello"字符串常量。
栈和堆的区别:
①管理方式不同:栈由操作系统自动管理(也可以用alloca来在栈上显示的分配空间);堆由程序员手工控制
②空间大小不同:栈从高地址向下扩展,是连续的内存区域,最大容量系统预先规定;堆向高地址扩展,是不连续的内存区域,系统用链表来存储空闲内存地址的,链表的遍历方向是由低地址向高地址。
③产生的碎片不同:频繁的malloc/free(new/delete)会造成内存空间的不连续,形成大量的碎片,使程序效率降低。栈一定是连续的内存空间。
④分配效率不同:栈有操作系统底层支持,快;堆靠C函数库提供,机制复杂,慢。
在释放内存后,把指针设为NULL的好处:
①后面对该指针的访问将立即失败
②后面的代码如果出现对指针的二次释放不会造成程序的崩溃,只是free函数失败。
内存动态申请函数
①malloc/free (new/delete)
②realloc 更改已经配置的内存空间 返回新分配的空间地址。
如果当前内存段后面的空间够用,则直接扩展这段内存,返回原地址
如果当前内存段后面空间不够用,则找到第一个能够满足要求的内存块,并将目前数据复制到新的位置,并将原来地址释放(自己不用释放了),返回新地址
如果找不到满足的内存,返回NULL,原地址还可以用
故不可以这样写 ptr = realloc(ptr, new_amount),因为如果分配失败会导致原来的空间不可获得。
③calloc函数 是malloc的简单包装,把malloc的数据初始化为0
④alloca 在栈上分配空间,不用自己释放,系统自动释放
内存数据管理函数
1.memcpy() 复制内存 bcopy()类似
2.memmove() 复制内存的时候考虑了源地址和目的地址重叠的情况
3.memset() 初始化指定内存单元 bzero()实现类似功能,初始化s起始的n字节为'\0'
4.memchr() 在一段内存空间中查找某个字符第一次出现的位置
5.memcmp() 比较内存单元s1和s2起始位置的前n个字节是否相等
【linux】进程存储管理的更多相关文章
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)
1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...
- linux进程虚拟地址空间
转载源 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中.这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块.在Linux系统中, ...
- Linux进程管理及while循环
目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...
- 如何灵活运用Linux 进程资源监控和进程限制
导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...
- TODO:Golang Linux进程退出说明
TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...
- Linux进程管理子系统分析【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...
- 12个Linux进程管理命令介绍(转)
12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国 作者:Linux [字体:大 中 小] 执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...
- linux 进程管理相关内容
简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...
- Linux - 进程查看与管理
标签(空格分隔): Linux 进程的静态查看 查看系统所有进程 ps -ef -- 输出来好乱,看不懂..: ps aux -- a表示所有与终端相关的进程,u表示所有以用户组织的进程状态的信息,x ...
随机推荐
- django-simple-captcha 验证码干扰线随机点位
CAPTCHA_NOISE_FUNCTIONS = ( 'captcha.helpers.noise_null',# 设置样式 'captcha.helpers.noise_arcs',# 设置干扰线 ...
- [bzoj1912]异象石(set)
Description Adera是Microsoft应用商店中的一款解谜游戏. 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图.这张地图上有N个点,有N-1条双向边把它们连 ...
- python集成开发环境PyCharm
环境安装视频介绍:http://pan.baidu.com/s/1gfz6wiZ ppmb 外加几个截图: activate:
- PowerShell批量配置VM端点
我们可以通过PowerShell脚本批量添加VM端点.请您参考以下方案. 准备工作 – PowerShell连接China Azure 1. 从官网下载页面,下载并安装Windows Azure Po ...
- AngularJS 之1-初识
摘要:本文主要记录第一次接触AngularJS的笔记,现在在我面前就是一张白纸+一点简单的html知识. 1.首先在<head>中加 <script src="一个网址(具 ...
- 3 ways of including JavaScript in HTML
Code written in JavaScript must be executed from a document written in HTML. There are three ways of ...
- Redis实现之RDB持久化(二)
RDB文件结构 在Redis实现之RDB持久化(一)这一章中,我们介绍了Redis服务器保存和载入RDB文件的方法,在这一节,我们将对RDB文件本身进行介绍,并详细说明文件各个部分的结构和意义.图1- ...
- MOCTF-火眼金睛
MOCTF-火眼金睛 http://119.23.73.3:5001/web10/ 把这个题目当作python爬虫来练习. 首先要获取到文本框里面的全部信息, import requests impo ...
- Leetcode 655.输出二叉树
输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一行正中间. ...
- Leetcode 546.移除盒子
移除盒子 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色.你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止.每一轮你可以移除具有相同颜色的连续 k 个盒子(k > ...