在C/C++中经常性的需要使用到sizeof,今天看了程序员面试宝典总算有所收获。以前老是觉得很纳闷,怎么结果不对呢。
#include<iostream>
using namespace std;
class B {
private:
bool m_bTemp;
int m_nTemp;
bool m_bTemp2;
};
class C {
private:
int m_nTemp;
bool m_bTemp;
bool m_bTemp2;
};
#pragma pack(1)
struct astruct{
char cValue;
int iValue;
};
#pragma pack()
int main(){
cout<<sizeof(B)<<endl; //12字节
cout<<sizeof(C)<<endl; //8字节
cout<<sizeof(char)+sizeof(int)<<endl; //1字节 4字节
cout<<sizeof(astruct)<<endl; //不使用 pack 8字节 // 使用pack (1) 5字节
return 0;
}
参数pack(n) n= 1,2,4,8 ,而且发现该书51页的sizeof(char)+sizeof(int)=6是错误的,char在C++中是1字节,而Java中才是2字节。
主要理解下内存的数据对齐的方式。
对于数组 比如char ss[] = "123456"; sizeof(ss) = 7 需要计算的是6+1 其中1是“\0” 另外 有 int a[10]; sizeof(a)=4*10
对于字符串 比如char *s = "012373773"; sizeof(*s)=1 *s是第一个字符