首页 > 系统相关 >基本类型大小,类大小及内存对齐

基本类型大小,类大小及内存对齐

时间:2024-09-30 10:01:25浏览次数:1  
标签:std 字节 int long 内存 大小 对齐 指针

讨论类大小时,我们设置系统为64位系统

1)空类 1字节

空类中只包含一个内存地址,保存类对象的唯一地址

空类
对于一个空类,即使没有任何成员变量,编译器也会为其分配1字节的内存,以确保不同对象的地址唯一性

2)包含虚函数的类

a) 只包含一个/多个虚函数的类 8字节
每个类的实例只会包含一个指向虚函数表(vtable)的指针(vptr)
无论该类中有多少个虚函数。vptr 的大小取决于系统的指针大小

b) 继承a)的类 8字节
实例大小仍然为8字节,因为只有一个vptr,且派生类共享基类的vptr。

3)例子


class BaseClass {
public:
	int val;
	//int val1;
	virtual void someFunction() {}
	virtual void someFunction2() {}
	int* ptr;

};

class a :public BaseClass
{
	double ff;
};

sizeof(BaseClass)=24
4+(4空:内存对齐)+8+8=24

sizeof(a)=32

4)在64位系统下,C++中常用的基本类型和一些标准库类型的大小如下:

基本类型
布尔类型 (bool):
大小:1字节
字符类型 (char, signed char, unsigned char):
大小:1字节
整数类型:
short (或 short int):
大小:2字节
int:
大小:4字节
long:
大小:8字节
long long:
大小:8字节
unsigned short:
大小:2字节
unsigned int:
大小:4字节
unsigned long:
大小:8字节
unsigned long long:
大小:8字节
浮点类型:
float:
大小:4字节
double:
大小:8字节
long double:
大小:通常为16字节,但有些编译器可能实现为12字节或8字节
指针类型
任何类型的指针:
大小:8字节
标准库类型
std::string:
实际大小取决于实现,但通常包含一个指针(8字节)和一些其他管理信息(如长度、容量等)。因此,std::string 的最小大小通常大于8字节。
std::vector:
包含三个指针(指向数据的开始、结束和容量的结束),因此最小大小为24字节(3个指针,每个8字节)。
std::unique_ptr:
大小:8字节(一个指针)
std::shared_ptr:
大小:16字节(两个指针,一个指向对象,一个指向控制块)
std::weak_ptr:
大小:16字节(两个指针,一个指向控制块,一个用于管理引用计数)

标签:std,字节,int,long,内存,大小,对齐,指针
From: https://www.cnblogs.com/light-LifeClub/p/18441264

相关文章

  • 数据在内存中的存储以及练习(一篇带你清晰搞懂)
    一:数据在内存中的存储首先,如果要了解数据在内存中的存储,我们首先要了解一个概念大小端是什么?1:什么是大小端?其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:大端(存储)模式:是......
  • C语言内存函数
    1.memcpy的使用和模拟实现void*memcpy(void*destination,constvoid*source,size_tnum);函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置这个函数在遇到"\0"的时候并不会停下来如果source和destination有任何的重叠,复......
  • 统计进程内存使用量
    统计进程内存使用量#!/bin/bash#文件名:memory_show.sh#作者:wanghongwei#日期:2024年9月29日#版本:1.0#描述:统计进程内存使用量#使用方式:./memory_show.sh[-k/-K][-m/-M][-g/-G]#初始化所有进程的统计变量declare-ATOTAL_MEM_SIZETOTAL_MEM_SIZ......
  • 视频画面裁剪技巧大盘点:7个靠谱方法,轻松裁剪视频画面大小
    随着短视频平台的兴起,大家都喜欢拿相机或手机拍摄视频记录美好瞬间分享到各大视频平台。您想要视频出众引人注意的话,一些必要的视频剪辑技巧是要学的。比如说,我们拍摄视频或下载视频素材时,想把一些不需要的画面部分剪辑掉,但有些朋友还不知道视频怎么剪裁画面大小?今天小编就来给......
  • C# 大小端转换
    https://www.cnblogs.com/Jasmine-K/p/7659908.html使用BinaryPrimitives辅助转换获取了byte[]bufferSpan的内容,接下来就可以调用BinaryPrimitives静态类提供的方法进行转换uintvalue=BinaryPrimitives.ReadUInt32BigEndian(bufferSpan);使用数组反转的方式转换......
  • 动态内存分配——C语言
    本篇文章是对动态内存分配部分内容的学习分享,包含了四个内存函数的接受奥与使用以及常见的一些错误那咱们废话不多说,直接开始吧!1.动态内存功能存在的意义说到内存开辟也许我们并不能马上做出反应且清楚得知道指的是什么事实上,我们已经掌握了内存开辟方法了只是我们对这个......
  • [Python手撕]文本左右对齐
    classSolution:deffullJustify(self,words:List[str],maxWidth:int)->List[str]:deffindlen(level):count=0forlinlevel:count+=len(l)returncountn=len(words)......
  • java 17 查看 运行时内存堆 的命令
    Java17Windows11- 发生问题运行了一个java程序,基于Java17的。在使用jmap查看堆内存分配时,出现了错误:>jmap-heap8400Error:-heapoptionusedCannotconnecttocoredumporremotedebugserver.Usejhsdbjmapinstead提示使用jhsdbjamp替代。ben......
  • MD语言 里链接图片大小的设置
    用md写博客时,引用的图片有时候很大,显示效果不美观。使用markdown语言图片大小设置可以是:图片链接后面直接加上=200X或=200X300注意等号前面有个空格使用标签,图片大小设置可以是:数值形式:width="200"或width="200x",height="300或height="300x",固定尺寸可同时指定宽和高......
  • 七种有效方法,轻松解决C盘内存爆满问题
    七种有效方法,轻松解决C盘内存爆满问题在我们日常电脑的使用中,C盘内存爆满是一个常见且令人头疼的问题。由于电脑运行产生的临时文件、软件下载及安装位置默认在C盘、系统更新后的文件占用大量空间等因素,导致C盘空间捉襟见肘。为了电脑能够流畅稳定运行,本文精心整理了七种清......