[已解决]关于C语言中的size

Tips:点击图片进入下一页



明白了是跟对齐有关,感谢坛友


[已解决]关于C语言中的size

[已解决]关于C语言中的size


如图,只知道char是1,int是4,double是8,但完全不符合结果。求好哥哥们解释32位和64位分别要怎么算。


网友评论:
考试会考这个???怎么可能
看到图片就不想看了,论坛明明有贴代码功能
alignment了解一下
看不到图


结构体自动对齐啊
是不是用的c++,多算了个this进去


虽然原理上来说的确char是1,int是4,double是8,但是由于涉及到字节对齐的问题不是简单的加减,老程序员就很讲究结构体内部类型的摆放顺序,至于具体32位和64位系统的补齐逻辑你要自己查一查
对于C++来说,如果不做特殊声明,编译器会自动扩展成员变量,将他们放置在最优的字节边界中,使CPU能快速访问成员,但占用的内存空间会增加。


都没class哪来的this。。。

主楼那个代码不管gcc还是g++编译出来结果都是一样的

—— 来自 vivo NEX S, Android 8.1.0上的 v2.0.4-play

结构体对齐没错,但是this指针是什么鬼,这里又没有类和对象,stdio.h是标准的C呀,就算是在.cpp文件里面用c++编译,在C++里面,this指针也不是对象的一部分,this指针只能在成员函数里面使用,全局和静态函数都不能使用this的,this指针所占的内存大小也不会反应在sizeof上的。所以更本不会影响结果,楼主这个是由编译器和操作系统自动填充的,分小端对齐和大端对齐两种情况,一般来说POSIX和微软的系统默认大端对齐,所以。。。。

—— 来自 HUAWEI MHA-AL00, Android 8.0.0上的 v2.0.4

this不占据任何空间,你说的C++的类额外空间是在虚表上的,只要不用虚函数,就没有虚表,每个对象也就没有这个指向虚表的指针。
地址对齐是正解,padding而已,参考http://www.drdobbs.com/cpp/paddi ... re-member/240007649