GCC: __attribut __ ((malloc))

8

Zitieren von GCC-Dokumentation (Hervorhebung von mir):

  

Das Attribut malloc wird verwendet, um dem Compiler zu sagen, dass eine Funktion dies kann   behandelt werden, als ob ein beliebiger Nicht-NULL-Zeiger, der zurückgegeben wird, keinen Aliasnamen haben kann   anderer Zeiger ist gültig, wenn die Funktion zurückgibt und der Speicher vorhanden ist   nicht definierter Inhalt . Dies verbessert oft die Optimierung. Standard   Funktionen mit dieser Eigenschaft sind malloc und calloc . realloc -like   Funktionen haben diese Eigenschaft nicht, da der Speicher, auf den verwiesen wird, nicht aufweist   habe undefinierten Inhalt.

Ich habe den folgenden Code:

%Vor%

Nun bin ich ein bisschen verwirrt: Obwohl ich das data -Member nicht initialisiert habe, setze ich die Felder alloc und size immer noch auf ihre jeweiligen Werte. Kann ich dieses zugewiesene Segment immer noch als "nicht definierten Inhalt" betrachten und das Attribut malloc verwenden?

    
peter.slizik 28.08.2013, 10:31
quelle

2 Antworten

11

Es ist sicher, Ihre Funktion buffer_new mit __attribute__((malloc)) zu markieren, weil der zurückgegebene Block keine Zeiger enthält.

Die neueste GCC-Dokumentation verdeutlicht die Bedeutung von __attribute__((malloc)) : Der von einer so markierten Funktion zurückgegebene Block darf keine Zeiger auf andere Objekte enthalten. Die Absicht ist, dem Compiler zu helfen, zu schätzen, welche Zeiger möglicherweise auf das gleiche Objekt zeigen: Das Attribut teilt GCC mit, dass es keine Angst haben muss, dass das Objekt, das Ihre Funktion zurückgibt, Zeiger auf etwas anderes, das es verfolgt, enthält.

    
Jim Blandy 19.03.2015, 05:33
quelle
0

Hier ist ein Link von einem Code Review im Ubuntu Forum und ja die Dokumentation muss verbessert werden Ссылка

    
Rahiakil 02.09.2013 19:35
quelle

Tags und Links