程序(可执行文件)存储结构与进程存储结构:

查看文件基本情况:file fileName。查看文件存储情况:size fileName(代码区text segment、全局初始化/静态数据区data segment、未初始化数据区bss、栈区stack、堆区heap)——如果有操作系统的支持,则可以不用关注;否则需要自行规划各个存储结构。

栈区:存放局部变量(不管是否初始化)和函数返回值以及参数值等、堆区:为变量分配的空间(malloc分配)全都放在堆区、BSS区:未初始化全局变量、数据区:已初始化全局变量、静态变量(未初始化放在BSS区)、常量;代码区:可执行代码。

C语言变量、函数存储类型,常见内存错误、内存管理的库函数:

C语言变量、函数存储类型:

变量声明:存储类型static+类型修饰符unsigned+数据类型int+变量名;函数声明:存储类型+返回数据类型+函数名(...)。

其中存储类型:

字符串:"\0"只是表示字符串的结束标志符,也就是说一个字符串到"\0"就结束,而"\0"后面的(包括"\0")所有字符串都不认(至少我现在发现printf是打印不出来的)。

printf的%x:以无符号十六进制形式输出整型数。

Linux可以对空指针读,但不能对空指针写(会报错:Segmentation fault (core dumped))。

堆内存泄漏:堆内存分配后,未释放或释放顺序不当(会导致程序越来越慢)。

内存管理的C语言库函数:

void *malloc(size_t size)若成功则返回分配的内存空间指针(需要强转),否则返回NULL;

void free(void *ptr)——释放后,一定要将ptr指针置空。

void *calloc(size_t num, size_t elesize)为长度为num的数组分配内存,elesize为每个元素的大小(即sizeof(类型))——若成功则返回数组首址,否则返回NULL;

void *realloc(void *exist, size_t new_size)为一个已分配内存的空间改变长度。

内存数据管理库函数:

void *memcpy(*dest,*src,n),将n个字节,从*src拷贝到*dest;成功则返回目的地址dest。

void *memmove(*dest,*src,n),和memcpy一样,都是拷贝,不一样的是该函数带内容检查?;成功则返回dest。

void *memset(*s,value,n),将指定内存区域中,前n个字节的每一个字节初始化为value;成功则返回s。

void *memchr(*s,value,n),查找指定内存区域中,前n个字节中第一个值为字符value的字节;成功找到则返回指向该字节的指针,否则返回NULL。

int memcmp(*s1,*s2,n),比较前n个字节,两个指定内存区域是否相同;相同则返回true。

伙伴算法关键元素:空闲链表+位示图+伙伴关系。

Linux—C内存管理的更多相关文章

  1. Linux堆内存管理深入分析(下)

     Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...

  2. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...

  3. 深入理解Linux中内存管理

    前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...

  4. Linux堆内存管理深入分析

    (上半部) 作者:走位@阿里聚安全 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较 ...

  5. 浅谈Linux的内存管理机制

    转至:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此, ...

  6. Linux内核内存管理算法Buddy和Slab: /proc/meminfo、/proc/buddyinfo、/proc/slabinfo

    slabtop cat /proc/slabinfo # name <active_objs> <num_objs> <objsize> <objpersla ...

  7. Linux的内存管理

    Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经 ...

  8. Linux堆内存管理深入分析 (上半部)【转】

    转自:http://www.cnblogs.com/alisecurity/p/5486458.html Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来 ...

  9. Linux的内存管理机制

    原文作者:技术成就梦想 链接:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘 ...

  10. 玩转Linux之内存管理-free

    玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...

随机推荐

  1. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  2. 给view添加类似系统上拉快捷菜单的手势

    iOS7以后从屏幕最下方上划会滑出快捷菜单,感觉这个效果不错,就想做个类似的效果,这个东西技术含量不高,每次都写一遍的话就太浪费时间了,所以就把它写成了一个分类,用起来会方便一点. demo地址:ht ...

  3. 解决Android studio 非法字符的问题

    前言:今天遇到一个问题,从一个项目中把一些类拷贝到Android studio 里面,运行的时候,报错. 显示刚才拷贝的类中有非法字符,我又检查了一遍,发现类中没有非法字符. 在网上查到了,相关的解决 ...

  4. 运算符&,|,^

    1.&按位“与”的计算是把两个数字分别写成二进制形式,然后按照每一位进行比较,&计算中,只要有一个是0就算成02.|运算转换成2进制进行比较,两个位只要有一个为1,那么结果就是1,否则 ...

  5. 手机影音1--SplashActivity

    /** * 1.设置被启动的Activity为单例模式 */ public class SplashActivity extends Activity { /** * 是否已经启动主页面 */ pri ...

  6. 【代码笔记】iOS-改变文字输入框背景

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  7. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息

    一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  8. android 界面设计基本知识Ⅲ

    本章继续讲述在android界面设计中相关的知识点.介绍内容包括BroadcastReceiver(广播),Service(服务),Widget(小部件),WebView(网页加载控件). 1.Bro ...

  9. C++语言-09-多任务

    概述 概念 计算机同时运行多个程序的能力,多任务处理的方法是:运行第一个程序的一段代码,保存工作环境:再运行第二个程序的一段代码,保存工作环境:--恢复第一个程序的工作环境,执行第一个程序的下一段代码 ...

  10. 驳 GarbageMan 的《一个超复杂的简介递归》——对延迟计算的实验和思考

    这是一篇因骂战而起的博文,GarbageMan 在该文章回复中不仅对我进行了侮辱,还涉及了我的母校,特写此文用理性的分析和实验予以回击. 在此也劝告 GarbageMan,没什么本事就别在那叫嚣了,还 ...