sizeof 是一个关键字、操作符,也是一个编译时运算符,其作用是返回一个对象或者类型所占的内存字节数。
对于sizeof的理解,sizeof:
首先是一个关键字,也是一个操作符,而非函数。
其次求长度,返回一个对象或者类型所占的内存字节数。
总结一下:sizeof更像一个特殊的宏,它是在编译阶段求值的。不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。指针变量的sizeof 值与指针所指的对象没有任何关系。
sizeof() 的使用方法:
sizeof(object); //sizeof(对象);
sizeof(type_name); //sizeof(类型);
sizeof object; //sizeof对象;【不常用】
您知道,指针是包含内存地址的变量。因此无论指针指向哪种类型的变量,其内容都是一个地址——一个数字。在特定的系统中,存储地址所需的字节数是固定的。因此,将 sizeof( )用于指针时,结果取决于编译程序时使用的编译器和针对的操作系统,与指针指向的变量类型无关,以下示例程序演示了这一点:
#include
using namespace std;
int main()
{
cout << "sizeof fundamental types -" << endl;
cout << "sizeof(char) = " << sizeof(char) << endl;
cout << "sizeof(int) = " << sizeof(int) << endl;
cout << "sizeof(double) = " << sizeof(double) << endl;
cout << "sizeof pointers to fundamental types -" << endl;
cout << "sizeof(char*) = " << sizeof(char*) << endl;
cout << "sizeof(int*) = " << sizeof(int*) << endl;
cout << "sizeof(double*) = " << sizeof(double*) << endl;
return 0;
}
输出:
sizeof fundamental types -
sizeof(char) = 1
sizeof(int) = 4
sizeof(double) = 8
sizeof pointers to fundamental types -
sizeof(char*) = 4
sizeof(int*) = 4
sizeof(double*) = 4
分析:
输出表明, 虽然 sizeof(char)为 1 字节, 而 sizeof(double)为 8 字节, 但 sizeof(char *) 和 sizeof(double *) 都是 4 字节。这是因为不管指针指向的内存单元是 1 字节还是 8 字节,存储指针所需的内存量都相同。
注意:
示例程序的输出表明,将 sizeof 用于指针的结果为 4 字节,但在您的系统上结果可能不同。这里的输出是使用 32 位编译器编译代码时得到的,如果您使用的是 64 位编译器,并在 64 位系统上运行该程序,可能发现将 sizeof 用于指针的结果为 64 位,即 8字节。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程