sizeof是C语言的一个运算符,对,简简单单就只是一个运算符,不是什么宏,不是什么函数,就像你经常见到的加减乘除符号一样,低调得不能再低调的这么一个运算符。所以好心劝你别去找sizeof的源码啦😂(比如我:C语言sizeof源码实现、sizeof实现机制、内核sizeof实现。。。)
或许你一样好奇,对于一个整形数,可以获取到它为4字节,不足为怪,但是对于一个数组,也就是内存,它是怎么知道要读多长呢?字符串还好,有结束标志符,但是数组没有啊。注意,sizeof在预处理阶段并没有展开,我认为是与编译器的某些内部操作有关,因为不管你怎么搞,编译器对你是最清楚的,你用了任意一块内存都被编译器记录在案,所以还是有在gcc编译里有哪些操作我们看不到的,所以还是别去想sizeof到底怎么实现的啦。
写代码的人应该想着自己来实现这么一个功能,即使用宏的方式实现一个与sizeof差不多的效果,这里只涉及sizeof简单的用法,比如sizeof(int),sizeof(3),别整那些sizeof(1+2)或者sizeof int什么的😅
网传较多的有两种方法:
//针对T为一个类型名的情况
#define _sizeof_type(T) (size_t)((T