C++ byte 面试题:关于字节(byte)填充
时间:2014-04-26 19:25 来源: 我爱IT技术网 作者:山风
解释内存填充的概念。
下面给出的类的声明,你可以预测内存填充将有多大?
在这个类中,你能重新排序的数据成员吗(从小到大的方式)?
32位系统中输出编译的情况,和64位系统中编译的情况?
什么是输出在32位系统中编译?在64位系统?
提示:
-输出架构/编译器依赖。可以__explain__得到的结果,并讨论可能会有所不同,在不同的编译器/建筑。
编译/执行作为一个32位的程序。(需要考虑c++中byte的知识点)
代码:
#include
using namespace std;
class Class0
{
public:
};
class Class1
{
public:
static void fn(){}
};
class ClassA
{
public:
void aFn(){};
int* a;
};
class ClassB
{
public:
virtual void aFn(){};
int* a;
};
class ClassC
{
public:
virtual void aFn(){};
virtual void aFn_2(){};
int* a;
};
class PaddingLoss
{
public:
char a;
int b;
};
class PaddingLoss2
{
public:
int a;
char b;
};
class PaddingLoss3
{
public:
int a;
char b;
char c;
};
class NoPaddingLoss
{
public:
int a;
char b;
char c;
char d;
char e;
};
class PaddingLoss4
{
public:
int a;
char b;
char c;
char d;
char e;
char f;
};
int main()
{
cout<<"Begin"<
cout<< sizeof(Class0) <
cout<< sizeof(Class1) <
cout<< sizeof(ClassA) <
cout<< sizeof(ClassB) <
cout<< sizeof(ClassC) <
cout<< sizeof(PaddingLoss) <
cout<< sizeof(PaddingLoss2) <
cout<< sizeof(PaddingLoss3) <
cout<< sizeof(NoPaddingLoss) <
cout<< sizeof(PaddingLoss4) <
// one additional byte 'takes' 4
// 64 bits: still 4-byte-aligned, but pointer consume 8 bytes
cout<<"End"<
return 0;
}
代码输出结果:
Begin
1
1
4
8
8
8
8
8
8
12
End
更多知识点详见:http://www.52ij.com/jishu/cpp/cbyte/
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
