内存管理
文章平均质量分 95
xl365t
专注于音视频通话、视频会议、即时通信等
展开
-
内存分配算法
内存管理中有一个很重要的概念叫内存碎片,内存碎片分为内部碎片和外部碎片,内部碎片是分配器分配的内存大于程序申请的内存。外部碎片是内存块太小,无法分配给程序使用。1、FreelistFreelist,通过链表,把内存中空闲块连接起来。分配的时候,找到大小合适的block,把它切分成两块,一块是待分配的大小,另一块放回free-list;释放的时候,插入到链表中,并且合并一下前后的...原创 2019-04-17 09:52:39 · 749 阅读 · 0 评论 -
tcmalloc内存管理
一、前言1、如何分配定长记录例如,我们有一个page的内存,大小为4kb,现在要以n个字节为单位进行分配。为了简化问题,就以16字节为单位进行分配。将4kb的内存划分为16字节的单元,每个单元的前8个字节作为节点指针,指向下一个单元。初始化的时候把所有指针指向下一个单元。分配时,从链表头分配一个对象出去,释放时,插入到链表。由于链表指针直接分配在待分配内存中,因此不需要额外的内存开销,...原创 2019-04-17 10:11:31 · 411 阅读 · 0 评论 -
内存管理函数
一、基本用法#include <unistd.h>int brk(void *addr);void *sbrk(intptr_t increment); //返回空间地址brk是系统调用,通过传递的addr来重新设置program break,成功返回0,否则返回-1。sbrk不是系统调用,是C库函数,用来增加heap,增加的大小通过参数increment来决定。in...原创 2019-04-17 10:29:12 · 278 阅读 · 0 评论 -
如何限制C++类的对象只能建立在堆上或栈上
C++中,类的对象建立分为两种,一种是静态建立,如A a; 另一种是动态建立,如 A *ptr = new A; 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立一个类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步:第一步...原创 2017-11-21 15:31:53 · 1389 阅读 · 0 评论 -
C++ 继承、虚继承、虚函数类内存分配
目录: 一、单个类的大小 二、普通单继承 三、普通多继承 四、虚拟单继承 五、包含虚函数的普通、虚拟混合继承 六、包含虚函数的多重虚拟继承一、单个类的大小 (1)真空类class CNull{};长度:1 内存结构:未知 注:长度其实为0,这个字节作为内容没有意义,可能每次都不一样。 (2)空类class CNull2{public: void foo(){prin原创 2017-11-20 20:21:51 · 640 阅读 · 0 评论 -
C++ 内存分区
在C++中,内存分成5个区,堆、栈、自由存储区、全局/静态存储区、常量存储区栈:由编译器在需要的时候分配,不需要的时候自动清除。里面的变量通常是局部变量、函数参数等。堆:new和delete来申请和释放。自由存储区:由malloc和free来申请和释放。全局/静态存储区:全局变量和静态变量被分配到同一块内存中,C语言中全局变量又分为初始化的和未初始化的,C++中不区分,他们共同占用同一块内...原创 2019-06-10 20:54:58 · 240 阅读 · 0 评论