基于系统架构的c++中的类大小
Class size in c++ based on system architecture
我创建了一个简单的类,并有一个带有虚拟函数的数据成员。下面我粘贴了代码以供参考。
class base
{
public:
int i;
virtual void foo()
{
}
base()
{
cout << "constructing a base" << endl;
}
~base()
{
cout << "destroying the base" << endl;
}
};
根据我对上述基于体系结构的示例的理解,在32位机器上,类大小为8字节(int为4字节,vpointer为4字节),在64位机器上为12字节(int和vpointer分别为4字节和8字节)。但当我以64位可执行文件的形式运行程序时,我得到了16个字节。我不明白额外的4个字节是从哪里来的。我正在使用xcode并运行macOS10.8。
独立于sizeof(int)
(其系统相关-->https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64(@ruenvb感谢链接),例如64位Windows使用4字节表示整数)编译器可能会将类填充到最大非结构成员的倍数(在这种情况下,由于vtable指针,为8字节)。
这是为了确保对成员的访问在特定地址对齐,以提高性能,并防止可能导致某些CPU出现硬件异常的未对齐数据访问。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- c++r值引用应用于函数指针
- 错误处理.将系统错误代码映射到泛型
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何仅使用对象名称打印特定于对象的成员
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 相当于LocaleMatcher的ICU4C
- 是否有等效于 macOS 上的 clone() 系统调用?
- stat() 相对于文件系统是原子的
- 为什么 Google 风格指南规定系统标题优先于项目标题?
- 用于独立于系统的程序分发的即时C++编译器
- C++17 相当于 boost::文件系统::unique_path()
- 面向嵌入式系统的独立于硬件C++ HAL
- 如何测试从依赖于外部系统的外部基类派生的类
- 当我从 Windows 请求"Miriam"字体时,我得到的是"Arial"字体。这怎么可能,因为字体文件"mriam.ttf"存在于我的系统中?
- 创建系统性能 Windows 10 应用(适用于商店)
- Cmake:如何将库标记为依赖于系统库
- 事件系统类似于c# (. net ?)