gpt4 book ai didi

c++ - 如果我的 Visual C++ 自定义内存分配器返回未正确对齐的 block ,会发生什么情况?

转载 作者:太空狗 更新时间:2023-10-29 21:29:37 25 4
gpt4 key购买 nike

在我的 Visual C++ 程序中,我使用自定义 operator new,它使用 malloc() 分配内存。我的自定义 operator new 将额外数据存储在内存的前 4 个字节中,并返回一个偏移指针作为 block 的开头(该程序是 32 位的):

 void* operator new( size_t size )
{
size += sizeof( int );//assume it doesn't overflow
int* result = static_cast<int*>( malloc( size ) );
if( result == 0 ) {
throw std::bad_alloc;
}
*result = ... //write extra data
return result + 1;
}

现在,如果调用者代码想要存储大小为 64 位的变量(__int64double),则该 block 将不会为此正确对齐。

这会在 32 位 Windows 程序中导致什么问题?

最佳答案

在 32 位 Windows 上,它可能会更慢,因为硬件可以处理未对齐的数据访问,只是更慢。

在其他操作系统/平台上,它可能会导致崩溃(或者性能非常低,因为操作系统会捕获未对齐的内存访问并在某些情况下为您模拟)

关于c++ - 如果我的 Visual C++ 自定义内存分配器返回未正确对齐的 block ,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com