Wie reserviert std :: string Speicher in GCC mit -wwhole-program?

8

Update: Das folgende Problem hängt anscheinend von der Option -fwhole-program ab.

Ich habe ein bisschen mit der Speicherzuweisung herumgespielt und bin dabei auf ein kleines Rätsel gestoßen: In GCC (4.6), wie reserviert std::string seinen Speicher [ editieren ] beim Kompilieren -fwhole-program [/]?

Habe folgendes Testprogramm:

%Vor%

Wenn ich einen anderen dynamischen Container verwende (der std::allocator<T> verwendet), verwendet der Allokator ::operator new , und so sehe ich die Debug-Nachrichten glücklich. Mit std::string sehe ich jedoch überhaupt nichts. Ich bin mir sicher, dass dynamische Zuweisung geschieht, wie ich mit valgrind bestätigen kann (13 plus String-Länge Bytes sind zugeordnet). Ich ging durch mehrere Quelldateien und den Standard, und ich bin ziemlich sicher, dass die Vorlage std::basic_string<T, std::char_traits<T>, std::allocator<T>> ist, so dass ich nicht weiß, warum ich die Nachrichten von meinen ersetzten Zuordnungsfunktionen nicht sehe.

Kann jemand dieses Rätsel aufklären? Was mache ich, um String-Zuordnungen zu verfolgen? Könnte irgendjemand dies durch irgendeinen anderen Compiler ausführen und sehen, ob es irgendeine Ausgabe erzeugt?

(Beispiel: Wenn ich std::map<int, int> m { { 0, 1 } }; hinzufüge, habe ich die Ausgabe new() requests 24 bytes, allocated at 0x8d53028 etc.)

    
Kerrek SB 02.10.2011, 21:15
quelle

1 Antwort

4

Betrachtet man die Ausgabe von g++ ... -S mit / ohne -fwhole-program so scheint es, dass die gesamten benutzerdefinierten new / delete-Operatoren überhaupt nicht ausgegeben werden, wenn fwhole-program verwendet wird.

Ich fange an zu vermuten, dass wir hier einen Fehler sehen.

    
sehe 02.10.2011, 21:53
quelle

Tags und Links