内存
c++内存
低头看天,抬头走路
句句都是正确的废话,招招都是致命的空招。
展开
-
Ptmalloc与Tcmalloc浅析
Ptmalloc内存分配内存优化总结:ptmalloc、tcmalloc和jemalloc内存释放所有调用delete释放的内存,并不是立即调用brk(sbrk)归还给操作系统,而是先将这个内存块挂在free-list(bins)里面,然后进行内存归并(可选操作,相邻的可用内存块合并为更大的可用内存块),并检查是否达到malloc_trim的threshhold,如果达到了,则调用malloc_trim归还部分可用内存给操作系统。glibc中,设置了默认进行malloc_trim的threshh原创 2020-12-29 01:42:17 · 1414 阅读 · 1 评论 -
三种IO模式和Page Cache的关系
一图以蔽之。原创 2020-12-29 00:02:08 · 1174 阅读 · 0 评论 -
虚拟内存和物理内存
概念物理内存就是指内存条,虚拟内存是逻辑概念。每个进程都有自己独立的虚拟地址空间,32位有4G大小,64位有256T大小。一个进程同一时刻不可能所有变量数据都会访问到,只需要在访问某部分数据时,把这一块虚拟内存映射到物理内存,其他没有实际访问过的虚拟地址空间并不会占用到物理内存,这样对物理内存的消耗就大大减少了 。虚拟内存划分从虚拟地址的角度来看,内存空间如下划分:32位系统最高的1G空间保留给内核使用,多个进程共享;64位系统最高的128T空间保留给内核使用并且不被进程共享栈,栈向低地址方向原创 2020-12-28 23:56:14 · 1036 阅读 · 0 评论 -
C++中的类所占内存空间总结
而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录的各个成员函数的地址。所以我们访问成员函数是间接获得地址的,这样也就增加了一定的时间开销,这也就是为什么我们提倡把一些简短的,调用频率高的函数声明为inline形式(内联函数)。(一)class CBase { }; sizeof(CBase)=1;为什么空的什么都没有是1呢?c+...原创 2019-07-27 21:48:33 · 389 阅读 · 0 评论 -
C++类对象创建过程
分配空间(Allocation)创建C++类对象的第一步就是为其分配内存空间。对于全局对象,静态对象以及分配在栈区域内的对象,对它们的内存分配是在编译阶段就完成了,而对于分配在堆区域内的对象,它们的分配是在运行是动态进行的。内存空间的分配过程涉及到两个关键的问题:需要分配空间的大小,即类对象的大小。这么问题对于编译器来说并不是什么问题,因为类对象的大小就是由它决定的,对于要分配多少内存,它最清楚...原创 2020-03-12 13:16:08 · 1062 阅读 · 0 评论 -
strcpy和memcpy,memmove的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。char...原创 2019-08-29 15:16:45 · 307 阅读 · 0 评论 -
C/C++ 内存对齐原则及作用
struct/class/union内存对齐原则有四个:1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/cl...原创 2019-08-13 00:07:25 · 217 阅读 · 0 评论 -
拷贝构造函数与深拷贝和浅拷贝
拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。 作用就是用来复制对象,在使用这个对象的实例来初始化这个对象的一个新的实例。类中可以存在多个拷贝构造函数。拷贝构造函数的调用时机当函数的参数为类的对象时#include<iostream>using namespace std;class CExample{priva...原创 2019-08-04 19:43:11 · 1329 阅读 · 1 评论 -
C++类内存分布
下面可以定义一个类,像下面这样:class Base{ int a; int b;public: void CommonFunction();};然后编译一下,可以看到输出框里面有这样的排布:这里不想花精力在内存对齐因素上,所以成员变量都设为int型。从这里可以看到普通类的排布方式,成员变量依据声明的顺序进行排列(类内偏移为0开始),成员函数不占内存空间。...原创 2019-07-31 00:05:01 · 234 阅读 · 0 评论