2021年8月1日

摘要: 对象复用 对象复用其本质是一种设计模式:Flyweight享元模式。 通过将对象存储到“对象池”中实现对象的重复利用,这样可以避免多次创建重复对象的开销,节约系统 资源。 零拷贝 零拷贝就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术。 零拷贝技术可以减少数据拷贝和共享总线操作的次数。 阅读全文
posted @ 2021-08-01 22:11 超人不会灰啊 阅读(313) 评论(0) 推荐(0) 编辑
 
摘要: 1) malloc函数 void* malloc(unsigned int num_size);int *p = malloc(20*sizeof(int));申请20个int类型的空间; 2) calloc函数 void* calloc(size_t n,size_t size);int *p = 阅读全文
posted @ 2021-08-01 20:26 超人不会灰啊 阅读(169) 评论(0) 推荐(0) 编辑
 
摘要: 1、 在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk、mmap、, munmap这些系统调用实现的; 2、 brk是将数据段(.data)的最高地址指针_edata往高地址推,mmap是在进程的虚拟地址空间中(堆和 栈中间,称为文件映射区域的地方)找一块空闲的虚 阅读全文
posted @ 2021-08-01 20:24 超人不会灰啊 阅读(123) 评论(0) 推荐(0) 编辑
 
摘要: 1、 new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持; 2、 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而 malloc则需要显式地指出所需内存的尺寸。 3、 new操作符内存分配成功时,返回的是对象类型的指 阅读全文
posted @ 2021-08-01 20:22 超人不会灰啊 阅读(62) 评论(0) 推荐(0) 编辑
 
摘要: 内存池(Memory Pool) 是一种内存分配方式。通常我们习惯直接使用new、malloc 等申请内存,这 样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性 能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备 用。 阅读全文
posted @ 2021-08-01 20:07 超人不会灰啊 阅读(349) 评论(0) 推荐(0) 编辑
 
摘要: 在C++中,new有三种典型的使用方法:plain new,nothrow new和placement new (1)plain new 言下之意就是普通的new,就是我们常用的new,在C++中定义如下: 因此plain new在空间分配失败的情况下,抛出异常std::bad_alloc而不是返回 阅读全文
posted @ 2021-08-01 17:08 超人不会灰啊 阅读(385) 评论(0) 推荐(0) 编辑
 
摘要: 1.用类的一个实例化对象去初始化另一个对象的时候 2.函数的参数是类的对象时(非引用传递) 3.函数的返回值是函数体内局部对象的类的对象时 ,此时虽然发生(Named return Value优化)NRV 优化,但是由于返回方式是值传递,所以会在返回值的地方调用拷贝构造函数 另:第三种情况在Linu 阅读全文
posted @ 2021-08-01 16:37 超人不会灰啊 阅读(774) 评论(0) 推荐(0) 编辑
 
摘要: (1)volatile volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比 如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再 进行优化,从而可以提供对特殊地址的稳定访问。 当要求使用 volatile 声明的变 阅读全文
posted @ 2021-08-01 16:07 超人不会灰啊 阅读(121) 评论(0) 推荐(0) 编辑