Вчера я узнал, что в DelphiXE с использованием директивы компилятора:
{$ SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
вы можете получить доступ / использовать адресное пространство 4 ГБ на 64-битных компьютерах, даже если компилятор DelphiXE создает 32-битный код.
Сегодня я пробовал программу DelphiXE на машине 4 ГБ с Windows7, и после запуска программы я действительно получаю следующий результат:
- Кбайт физической памяти: ~ 4.000.000KB
- Кбайт свободной физической памяти: ~ 3.200.000KB
- Процент используемой памяти: ~ 20%
- Кбайт виртуального адресного пространства: ~ 4.000.000KB¨
- Кбайт свободного виртуального адресного пространства: ~ 4.000.000KB
Каждый раз после загрузки нескольких объектов (таблиц, строк, списков, множества указателей) объем свободной памяти уменьшается, что нормально, пока вся память не используется.Все в порядке.Но вот несколько вопросов:
1.Иногда я слышал, что программа использует жесткий диск вместо ОЗУ, потому что он замедляется (но память все еще доступна).Это возможно?Если да, как запретить программе использовать диск, когда ОЗУ еще доступно?Или, может быть, некоторые временные файлы записываются на диск?
Что произойдет с той же программой на компьютере с 8G Ram?32-битная программа сможет использовать все 8G?Я полагаю, что нет, поскольку указатели имеют только 32 бита, и существует ограничение на доступ к ним.
Если бы я скомпилировал ту же программу на 64-битной машине с 64-битным компилятором (что невозможновсе же, к сожалению), я предполагаю, что на машине с 4GRam 64-битная программа будет иметь меньше свободного места в ОЗУ, чем 32-битная программа с включенным IMAGE_FILE_LARGE_ADDRESS_AWARE, потому что указатели являются 64-битными и, следовательно, они одни занимают больше места, чем 32-битные указатели.Я совершенно не прав?
Спасибо за любой ответ.