Что сделать для подавания заявки Большой Знающий Адрес?

Я в настоящее время нахожусь в процессе подавания нашей заявки Большой Знающий Адрес. Поскольку опыт показал, существуют некоторые неожиданные глюки при выполнении так. Я создаю это сообщение для вхождения в полный список шагов, которые должны быть сделаны.

Соображения разработки перечислили в AMD Большой Адрес, который Осведомленное руководство обеспечивает хорошей начальной точке, но ни в коем случае не завершено:

Следующие соображения помогут удостовериться, что код может обработать адреса, больше, чем 2 ГБ:

  • Избегайте использования адресной арифметики с указателями со знаком (Т.е. выдерживает сравнение и добавляет),
  • Указатели используют все 32 бита. Не используйте Bit31 для чего-то еще.
  • Некоторый dll’s будет загружен только под границей на 2 ГБ. В этом случае никакая последовательная память не может быть выделена с VirtualAlloc ().
  • Каждый раз, когда возможно, используйте GlobalMemoryStatusEx () (предпочтенный) или GlobalMemoryStatus () для получения емкостей памяти.

Поэтому вопрос: Каков полный список вещей, которые должны быть сделаны при создании C++ исходным приложением Win32 Большой Адрес Знающий?

15
задан EnterTheNameHere Bohemian 28 January 2014 в 20:18
поделиться

1 ответ

  • (очевидно) выберите Support Address Larger than 2 Gigabytes (/ LARGEADDRESSAWARE) в свойствах проекта: Linker / System / Enable Large Address
  • проверьте все вычитания указателя и убедитесь, что результат сохраняется в тип, который может содержать возможные различия или заменять их сравнениями или другими конструкциями - см. Арифметика определения указателя из-за LARGEADDRESSAWARE ). Примечание: сравнение указателей должно быть нормальным, вопреки совету AMD, нет причин, по которым оно должно вызывать проблемы с 4 ГБ
  • , убедитесь, что вы не предполагаете, что указатели имеют нулевой бит 31, не пытайтесь использовать бит 31 для чего-то еще.
  • заменить все вызовы GetCursorPos на GetCursorInfo - см. GetCursorPos не работает с большими адресами
  • для всех назначений в PVOID64 используйте PtrToPtr64, например, необходимо при использовании ReadFileScatter см. ReadFileScatter раздел примечаний
24
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: