Когда выполняется следующее, я получаю разные _pfloatPos и _charPos:
float* const _pData = new float[0x50000000];
float* const _floatPos = _pData + 0x400000B0;
char* const _charPos = ((char*)_pData) + 0x400000B0 * 4;
if ((char*)_floatPos != _charPos)
{
throw "Derp.";
}
Может быть, у меня туман в голове и я что-то упустил. Два адреса должны быть одинаковыми, верно?
Я посмотрел на разборку. 1000002C0h равно 4 * 0x400000B0. Что касается второго, оно, похоже, было усечено в какой-то момент.
float* const _floatPos = _pData + 0x400000B0;
00007FF7CE48F6E2 mov rax,1000002C0h
00007FF7CE48F6EC mov rcx,qword ptr [_pData]
00007FF7CE48F6F0 add rcx,rax
00007FF7CE48F6F3 mov rax,rcx
00007FF7CE48F6F6 mov qword ptr [_floatPos],rax
char* const _charPos = ((char*)_pData) + 0x400000B0 * 4;
00007FF7CE48F6FA mov rax,qword ptr [_pData]
00007FF7CE48F6FE add rax,2C0h
00007FF7CE48F704 mov qword ptr [_charPos],rax
Я использую Visual Studio 2017 версии 15.9.2, но я не уверен насчет версии компилятора.