linux内存管理
linux内存管理
ps aue:查看当前进程,a全部u用户e有效进程-->cd 进程编号:进入进程。进入进程后-->cd maps:查看内存空间。
getpid():获取当前进程编号
linux每个程序的入口地址是一样的08048000,windows的是08040000
内存管理的四个区:
代码区:main函数或者其他函数,全局常量(相当于字面量),
全局区:全局变量
堆:指针
栈:局部常量放在临时栈区,局部变量
内存是用堆栈数据结构管理的。堆的背后是用链表维护的,一个指针用4个位就可以表示,但其实是16,其他是有链表的其他数据占有
C语言中malloc使用一个数据结构(链表)维护分配空间,链表的构成:分配的空间/上一个空间数据/下一个空间/本空间大小等信息。对malloc分配的空间不要越界访问。因为容易破坏后台维护结构.导致malloc/free/calloc/realloc不正常工作。
C++中new的实现使用的是malloc来实现的。区别:new使用malloc后,还要初始化空间。基本类型,直接初始化成默认值。UDT(复合)类型,调用指定的构造器。delete调用free实现。delete负责调用析构器.然后在调用free
new与new[]区别:new只调用一个构造器初始化。new[]循环对每个区域调用构造器。
delete 与delete[]同上
C++的new与malloc的关系
malloc new new[]
realloc new()//定位分配空间,指针跟所指向的变量是一个位置
calloc new[]
free delete delete[]?