【C++】sizeof()函数解析

【1】 常见数据类型的的sizeof函数得出的值表

char int short long float double 指针
32 bit 1 4 2 4 4 8 4
64 bit 1 4 or 8 2 8 4 8 8

【2】 数组求sizeof 的值

数组的大小 = 数组中元素的个数 x 该类型的大小

【3】 union 求 sizeof 的值

由于 union 中存在复写现象,union 结构的 sizeof 的值即为 union 中最大的元素的大小。例如;

union student{
    int id;
    double score;
}

这个 union 中的最大的元素是double,所以它的 sizeof 就是8。

【4】 struct 中求 sizeof 的值

struct 没有复写的情况,但是它的 sizeof 情况比较复杂,因为存在补位的情况,例如下面的例子

struct stu{
    char s;
    int i;
}

它的大小不是简单的 1 + 4 = 5,而是8。因为 struct 的 size 一定是最大成员的整数倍,如果其中有元素不需要最大元素那么大的位置的话,就空着。所以上例的 struct 的大小为8。下一个例子

struct stu1{
    char a;
    char b;
    int c;
}

struct stu2{
    char a;
    int c;
    char b;
}

虽然 stu1 和 stu2 的元素是一样的,只是顺序不一样,但是因为补位的原因,第一个的 size 为8字节,而第二个的 size 为 12 字节。

【5】 类对象的 sizeof 大小

【5.1】 一个空类,里面任何函数也没有,它的对象的 size 是多少?

大小为1。不是0的原因是当我们申明了一个对象的时候,系统就需要为其分配资源,所以一定不是0。

【5.2】 如果我们在空类中加入了构造函数和析构函数,size 是多少?

大小还是1,因为函数和对象是分离的。

【5.3】 如果是虚函数呢?

虚函数,每个类的对象中都会有一个指向虚函数的指针,所以大小要增加,在32位中,size为4个字节,在64位中为8个字节。

时间: 2024-10-06 01:17:10

【C++】sizeof()函数解析的相关文章

C/C++ sizeof函数解析——解决sizeof求结构体大小的问题

C/C++中不同数据类型所占用的内存大小 32位                 64位 char               1                    1 int                  4             大多数4,少数8 short              2                    2 long               4                    8 float               4              

socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题

Tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调

C++虚函数解析(转载)

虚函数详解第一篇:对象内存模型浅析 C++中的虚函数的内部实现机制到底是怎样的呢? 鉴于涉及到的内容有点多,我将分三篇文章来介绍. 第一篇:对象内存模型浅析,这里我将对对象的内存模型进行简单的实验和总结. 第二篇:继承对象的构造和析构浅析,这里我将对存在继承关系的对象的构造和析构进行简单的实验和总结. 第三篇:虚函数的内部机制浅析,这里我将对虚函数内部的实现机制进行实验总结. 我使用的编译器是VS2008,有不足或者不准确的地方,欢迎大家拍砖(我个人非常迫切的希望得到大家的指正),我会及时修正相

ngx_http_process_request_line函数解析

处理请求行,一般的http请求过程中,ngx_http_process_request_line函数被ngx_http_wait_request_handler调用,并且在ngx_http_wait_request_handler中被设置为读事件的回调函数.在连接被accept之后,有数据到达之后会执行ngx_http_create_request函数,之后再有读事件被触发时被调用的回调函数就是ngx_http_process_request_line.主要代码和解析如下. 判断是否超时,如果超

sizeof函数总结

sizeof函数功能:计算数据空间的字节数 1.与strlen()比较 strlen计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素. sizeof计算数据(包括数组.变量.类型.结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"\0"的大小). 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种.所有指针变量的sizeof 操作结果均为4. 实例1::char *p; sizeof(p)=4; sizeof(*p) =

[转]socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题

Tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调

AngularJS指令中的compile与link函数解析

AngularJS指令中的compile与link函数解析 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. 原文地址 angularjs里的指令非常神奇,允许你创建非常语义化以及高度重用的组件,可以理解为web components的先驱者. 网上已经有很多介绍怎么使用指令的文章以及相关书籍,相互比较的话,很少有介绍compile与link的区别,更别说pre-link与post-lin

ngx_http_process_request_headers函数解析

ngx_http_process_request_headers函数被ngx_http_process_request_line函数调用,将请求头逐个放到r->headers_in.headers结构体中.由于不确定请求中一共有多少个header,所以这个函数主要功能也是在for(;;){}循环中完成,一下所有的代码都是在上述循环内部的.主要代码和解析如下: 判断是否超时,如果超时,报错并结束请求.    if (rev->timedout) {        ngx_log_error(NG

iOS 基础函数解析 - Foundation Functions Reference

Foundation Functions Reference Framework Foundation/Foundation.h Declared in NSBundle.h NSByteOrder.h NSDecimal.h NSException.h NSObjCRuntime.h NSObject.h NSPathUtilities.h NSRange.h NSZone.h Overview This chapter describes the functions and function