Linux—C内存管理
程序(可执行文件)存储结构与进程存储结构:

查看文件基本情况: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内存管理的更多相关文章
- Linux堆内存管理深入分析(下)
Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
- 深入理解Linux中内存管理
前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...
- Linux堆内存管理深入分析
(上半部) 作者:走位@阿里聚安全 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较 ...
- 浅谈Linux的内存管理机制
转至:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此, ...
- Linux内核内存管理算法Buddy和Slab: /proc/meminfo、/proc/buddyinfo、/proc/slabinfo
slabtop cat /proc/slabinfo # name <active_objs> <num_objs> <objsize> <objpersla ...
- Linux的内存管理
Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经 ...
- Linux堆内存管理深入分析 (上半部)【转】
转自:http://www.cnblogs.com/alisecurity/p/5486458.html Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来 ...
- Linux的内存管理机制
原文作者:技术成就梦想 链接:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘 ...
- 玩转Linux之内存管理-free
玩转Linux之内存管理-free free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之 ...
随机推荐
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q88-Q91)
Question 88 You are designing a SharePoint 2010 application that stores data in a list named Base L ...
- JavaScript学习04 对象
JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...
- Android studio 克隆分支
1.当远程仓库有两个分支时,像这样的 获得分支的远程仓库地址 注意:这个地址默认就是克隆master 分支 2.如何克隆 v1.2 分支 ? 用android studio 把项目打开,可以看到 此时 ...
- javaScript基础语法(下)
4.逻辑控制语句 4.1条件结构 条件结构分为if结构和switch结构. 通常在写代码时,您总是需要为不同的决定来执行不同的动作.您可以在代码中使用条件语句来完成该任务. 在 JavaScript ...
- Web API在OWIN下实现OAuth
OAuth(Open Authorization) 为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码), ...
- centos7 添加图形界面的功能
一般安装centos最小版的时候默认没有图形界面 需要自己安装 sudo yum groupinstall "GNOME Desktop" "Graphical Adm ...
- JavaScript(七)——视频插入
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 【Android】apk文件反编译
工具: 压缩软件:用于解压apk包 dex2jar:*.dex反编译为Jar包 jd-gui:查看Jar文件 (PS:不知道博客园如何上传附件,只能把工具挂到百度网盘了:http://pan.baid ...
- Java的String.valueOf 转换 与、空串+类型变量转换与封装类(Integer)的toString方式转换比较。
1.空串+类型变量方式转换 int i=20; String s=""+i; 这种方式实际上经过了两个步骤,首先进行了i.ToString()把 i 转换为 字符串,然后再进行加法 ...
- 烂泥:高负载均衡学习haproxy之关键词介绍
本文由ilanniweb提供友情赞助,首发于烂泥行天下 上一篇文章我们简单讲解了有关haproxy的安装与搭建,在这篇文章我们把haproxy配置文件中使用到的关键词一一介绍下. 关注我微信ilann ...