В моей программе Visual C ++ я использую пользовательский operator new
, который использует malloc()
для выделения памяти. Мой пользовательский operator new
сохраняет дополнительные данные в первых 4 байтах памяти и возвращает указатель смещения в качестве начала блока (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 бита (__int64
или double
), блок не будет правильно выровнен для этого.
Какие проблемы это может вызвать в 32-разрядной программе Windows?