看《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】进程存储管理的更多相关文章

  1. Linux进程实践(1) --Linux进程编程概述

    进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...

  2. Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)

    1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...

  3. linux进程虚拟地址空间

    转载源 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中.这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块.在Linux系统中, ...

  4. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

  5. 如何灵活运用Linux 进程资源监控和进程限制

    导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...

  6. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...

  7. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  8. 12个Linux进程管理命令介绍(转)

    12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国  作者:Linux [字体:大 中 小]   执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...

  9. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  10. Linux - 进程查看与管理

    标签(空格分隔): Linux 进程的静态查看 查看系统所有进程 ps -ef -- 输出来好乱,看不懂..: ps aux -- a表示所有与终端相关的进程,u表示所有以用户组织的进程状态的信息,x ...

随机推荐

  1. 数据存储之使用MongoDB数据库存储数据

    安装MongoDB环境: 1.官网下载:https://www.mongodb.com/download-center#community 2.MongoDB可视化工具compass下载https:/ ...

  2. SoapUI(一)之webservice测试

    webservice测试需要具备的条件: 1.了解业务需求:如从客户端发送一个post请求给服务器,服务器将响应传给客户端. 2.需要一个明确的wsdl地址: 如天气预报的接口链接:http://ww ...

  3. 算法训练 Eurodiffusion

    Eurodiffusion /***********并未完全AC***********/ #include<iostream> #include<algorithm> #inc ...

  4. UVALive 4685 Succession 树DP+背包

    一.前言 这道题同样来自于红书P142,作为树DP专题中的一道比较难的题目,A了一天左右的时间,看上去事实证明,这题的难度理我本身的实力还是有些太远了,于是正确的做法应该是分析一下题目之后进行解析什么 ...

  5. POJ3320 尺取法的正确使用法

    一.前言及题意: 最近一直在找题训练,想要更加系统的补补思维,补补漏洞什么的,以避免被个类似于脑筋急转弯的题目干倒,于是在四处找书,找了红书.蓝书,似乎都有些不尽如人意.这两天看到了日本人的白书,重新 ...

  6. flex布局之flex-grow和flex-shrink如何计算

    此文已由作者张含会授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 关于盒模型布局 如何实现两栏布局? (表格) 流式, 浮动, 定位 如何选择? 流式 > 浮动 > ...

  7. 我给女朋友讲编程CSS系列(3) CSS如何设置字体的类型、大小、颜色,如何使用火狐浏览器的Firebug插件查看网页的字体

    一.CSS如何设置字体的类型.大小.颜色 设计网页时,一般设置body的字体,让其他标签继承body的字体,这样设置特别方便,但是标题标签h1到h6和表单标签(input类型)是没有继承body的字体 ...

  8. Python框架之Django学习笔记(三)

    开始一个项目 第一次使用 Django,必须进行一些初始化设置工作. 新建一个工作目录,例如 D:\tool\python\Python27\workspace\djcode,然后进入该目录. 转到创 ...

  9. Leetcode 516.最长回文子序列

    最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1:输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 " ...

  10. Python的网络编程socket模块

    (1)利用socket进行简单的链接 Python里面的socket支持UDP.TCP.以及进程间的通信,socket可以把我们想要发送的东西封装起来,发送过去,然后反解成原来的样子,事实上网路通信可 ...