В настоящее время я нахожусь в разработке нашего приложения Large Address Aware. Как показал опыт, при этом возникают неожиданные ошибки. Я создаю этот пост, чтобы составить полный список шагов, которые необходимо предпринять.
Рекомендации по разработке, перечисленные в руководстве AMD Large Address Aware, являются хорошей отправной точкой, но отнюдь не полны:
Следующие соображения помогут убедиться, что код может обрабатывать адреса размером более 2 ГБ:
- Избегайте использования арифметики подписанных указателей (I.e. сравнивает и добавляет)
- Указатели используют все 32 бита. Не используйте бит31 для чего-то еще.
- Некоторые DLL будут загружены только под границей 2 ГБ. В этом случае никакая последовательная память не может быть выделена с помощью VirtualAlloc().
- По возможности используйте GlobalMemoryStatusEx() (предпочтительно) или GlobalMemoryStatus() для извлечения размеров памяти.
Таким образом, возникает вопрос: Каков полный список вещей, которые необходимо выполнить при создании собственного приложения С++ Win32? Большой адрес Aware?