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