當使用#pragma pack(1)時,我發現Solaris和Linux之間的結構大小有所不同。在Linux上,Derv的大小爲128,但是在Solaris上它的大小爲132.有人可以告訴我爲什麼是這種情況?我如何在Solaris上將其升至128?下面是代碼:在Solaris和Linux上使用#pragma pack(1)時的結構大小差異
#include <inttypes.h>
#include <iostream>
#include <stddef.h>
#pragma pack(1)
struct Base {
char m_1;
uint8_t m_2;
uint64_t m_3;
uint64_t m_4;
uint16_t m_5;
uint32_t m_6;
uint32_t m_7;
uint64_t m_8;
uint64_t m_9;
uint32_t m_10;
char m_11[6];
};
struct Derv : Base {
int m_1;
char m_2[66];
int m_3;
};
#pragma pack()
int main()
{
std::cout << sizeof(Base) << ", " << sizeof(Derv) << std::endl;
std::cout << offsetof(struct Derv, m_1)
<< ", " << offsetof(struct Derv, m_2)
<< ", " << offsetof(struct Derv, m_3)
<< std::endl;
}
編譯這樣的: 在Linux上:克++ -Wno-無效-offsetof struct_test.cpp 在Solaris:CC -g0 -xarch = SSE2 -mt struct_test.cpp
版本:
$ g ++ -v
使用內置規格。 目標:x86_64-redhat-linux 配置:../configure --prefix =/usr --mandir =/usr/share/man --infodir =/usr/share/info --with-bugurl = http://bugzilla.redhat.com/bugzilla - -enable-bootstrap --enable-shared --enable-threads = posix --enable-checking = release --with-system-zlib --enable -__ cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique- object --enable-languages = c,C++,objc,obj-C++,java,fortran,ada --enable-java-awt = gtk --disable -dssi --with-java-home =/usr/lib/jvm /java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar =/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune = generic --with-arch_32 = i686 --build = x86_64-redhat-linux 線程模型:posix gcc版本4.4。 7 20120313(Red Hat 4.4.7-3)(GCC)
的Solaris編譯:
$ CC -V
CC:孫C++ 5.9 SunOS_i386補丁124864-13 2009/05/26
感謝您的時間。
-misalign:C用戶指南SPARC。 – Prashanth