Причин может быть несколько.
Любое приложение, которое запрограммировано и имеет низкий уровень, может ожидать 32-битный регистр. Хороший пример - драйвер Zone Alarm, опубликованный novatrust. GTA4 может использовать сборку для повышения производительности в нескольких моментах, что может привести к чему-либо, или даже просто предполагать 32-битный код на C ++. Например, возьмите следующий код:
struct GPoint
{
int x;
int y;
}
// Array of twenty GPoints
GPoint[] myArr = malloc(20 * sizeof(GPoint);
GPoint* myPointer = myArr;
int index = GetIndexAffectedPoint();
// Invert X and Y for the point
myPointer += 8*index;
swap(myPointer);
Я знаю, что пример довольно наивный, но в любом случае, в этом коде вы предполагаете, что ваша структура имеет длину 8 байтов (4 байта целого числа x и 4 байта для целого числа y), но в 64-битной системе это вдвое дольше, так что вы в конечном итоге поменяете неправильную точку ... подобные вещи часто случаются на языках низкого уровня, особенно при попытке повысить производительность ...