Windows x64 bit с 5 ГБ ОЗУ. Мой двоичный файл - 64-битный, собранный с помощью компилятора версии - "Оптимизирующий компилятор Microsoft (R) C / C ++ версии 14.00.50727.762 для x64"
Microsoft предлагает установить указанный ниже раздел реестра для тестирования 64-битных приложений, и я установил то же самое в моем окне. Проблема не возникает, если я не установил реестр, указанный ниже, потому что программа размещена по низкому адресу. Тот же ключ реестра упоминается в обсуждении - Как программист, о чем мне нужно беспокоиться при переходе на 64-битные окна?
Чтобы принудительно выделять ресурсы с более высоких адресов перед более низкими адресами в целях тестирования, укажите MEM_TOP_DOWN при вызове VirtualAlloc или установите для следующего значения реестра значение 0x100000:
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ AllocationPreference
char *alloc_str()
{
char *temp;
temp = (char *) malloc(60);
/* copy some data to temp */
return temp;
}
main()
{
char *str;
str = (char *)alloc_str();
}
malloc
возвращает адрес 0x000007fffe999b40
, который хранится в temp
, но когда указатель возвращается в main ()
, str
] получает только вторую половину - 0xfffffffffe999b40
, и я не могу получить доступ к данным в этом месте.