Jestem obecnie w trakcie tworzenia naszej aplikacji Large Address Aware. Jak pokazało doświadczenie, pojawiają się nieoczekiwane błędy. Tworzę ten post, aby utworzyć pełną listę kroków, które należy podjąć.Co zrobić, aby aplikacja Large Address Aware?
Rozważania rozwojowe wymienione w AMD Large Address Aware guide stanowić dobry punkt wyjścia, ale nie są bynajmniej Complete:
następujące rozważania pomogą, aby upewnić się, że kod może obsługiwać adresy większe niż 2 GB:
- Unikaj stosowania arytmetyki ze wskaźnikami (np. Porównuj i dodaje)
- Wskaźniki używają wszystkich 32-bitów. Nie używaj Bit31 do czegoś innego.
- Niektóre biblioteki dll zostaną załadowane tuż pod granicą 2GB. W takim przypadku żadna kolejna pamięć nie może zostać przydzielona za pomocą VirtualAlloc().
- Gdy tylko jest to możliwe, użyj funkcji GlobalMemoryStatusEx() (preferowane) lub GlobalMemoryStatus(), aby pobrać rozmiary pamięci.
Zatem pytanie brzmi: Co znajduje się pełna lista rzeczy, które muszą być wykonane podczas dokonywania C++ Win32 natywna aplikacja Large Address Aware?
"Wyeliminuj wszystkie odejmowania wskaźnika" jest nadmierne. Wskaźniki w pojedynczej macierze działają doskonale. – MSalters
@Suma: dodatki po wskaźnikach NIE są w porządku, ponieważ dodanie kursora może zostać przepełnione po ustawieniu 'LARGEADDRESSAWARE'. –
ponadto: uważaj na biblioteki innych firm omówione tutaj: http://stackoverflow.com/questions/2288728/ – Opmet