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

查看文件基本情况: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. SharePoint 2010 匿名访问开启后不能访问Allitems.aspx或DisplayForm.aspx

    Body: Full Credit goes to Pet Stilgoe: http://www.petestilgoe.com/2010/02/allowed-anonymous-access-o ...

  2. SQLLDR 教程

      )- 总览     http://blog.csdn.net/dbanote/article/details/9153895 )- 命令行参数 http://blog.csdn.net/dbano ...

  3. SQL for SQLite

    语法 verb + subject + predicate commannds(命令) SQL由命令组成,以分号为结束.命令有token组成,token由white space分隔,包括空格.tab. ...

  4. Object-c字符串操作

    字符串操作: -(void) testString{ NSString *str1 = @"some string"; NSLog(@"%@", str1); ...

  5. WPExpress78_update 离线包

    http://115.com/lb/5lb7rnbr#Windows Phone SDK update for WP 7.8115网盘礼包码:5lb7rnbr 使用/layout下载的,相信很多朋友已 ...

  6. MVC权限控制

    基本方法是重写AuthorizeAttribute类的AuthorizeCore方法 protected override bool AuthorizeCore(HttpContextBase htt ...

  7. input的file 控件及美化

    在一些网站进行上传时,当单击了“浏览”按钮之后会弹出[选择文件]的对话框.想要实现这一功能,用input的file控件来实现就好啦~ <!doctype html> <html la ...

  8. 天书笔记:如何创建一个现代的footer(页脚)

    此笔记纯属本人脑残笔记,阅读困难不理解属正常现象,初学者尽量不要阅读,否则轻则口吐白沫重则走火入魔,切记切记 老规矩,效果图 这个布局也是从b站看到的,回来自己实现了一遍 HTML: <div ...

  9. 理解JavaScript中的原型继承(2)

    两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...

  10. 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项 解决方法

    在webconfig中加入这段话就可以了 <runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:as ...