Biblioteka środowiska wykonawczego Microsoft udostępnia wersję debugowania funkcji alokacji. Dla C++ jest to wariant debug wykonawcy nowy z podpisem:Przesłanianie nowych wersji debugowania bez uszkodzenia miejsca docelowego nowa
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
i makro jest zdefiniowany jak
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
teraz instrumentu wszystkie przydziały, jeden normalnie definiuje
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
Jednak ta definicja dzieli każde miejsce, które używa nowego miejsca docelowego, ponieważ dwa zestawy argumentów kończą się błędem składni. Teraz mogę z łatwością poradzić sobie z kilkoma zastosowaniami w naszym kodzie, ale standardowa biblioteka i miejsce doładowania wykorzystują nowe miejsca w każdym miejscu. Zatem zdefiniowanie tego na całym świecie oznacza włączenie wielu elementów przed definicją i spowalnia kompilację.
Czy istnieje sposób na alokację instrumentów w naszym kodzie bez wciągania nagłówków tylko dlatego, że zawierają nowe miejsca docelowe i bez konieczności wstawiania ostatniego zdefiniowanego powyżej we wszystkich plikach lub ręcznego pisania DEBUG_NEW?
Prekompilowane nagłówki byłyby naprawdę trudne do utrzymania w naszej sytuacji. Będą naprawdę ogromne i złożone ze względu na różne problemy z przenośnością (baza kodu jest kompilowana na 4 bardzo różne platformy). –
W jaki sposób byłyby trudne do utrzymania? Pch powinien zmieniać się bardzo rzadko. –
Jeśli zawierał elementy doładowania, zmieniałby się dość często. Ale może powinienem spróbować prekompilować właśnie ten nagłówek debugowania pamięci (który dostaje wtrysk z opcją kompilatora '/ Fi'); miejsce docelowe nowe pojawia się w znacznie mniejszej liczbie miejsc. –