Ich habe dies in GCC C ++ Standard -Bibliothekserweiterungpool_Allocator.H aufgetreten, das einen Allocator -Typ enthält, der Speicherpool verwendet, um die Effizienz der kleinen Kettenspeicherzuweisung zu verbessern. In der Mitgliedsfunktion _m_refill () von __pool_alloc_base muss sich die Konvertierung von char* (die für die Verwaltung von RAW -Speicher verwendet wird) zu _obj* (welche verwendet ist die Listenknotenstruktur, die zum Verwalten des freien Stücks verwendet wird. müssen es in OBJ1 -Typ umwandeln, wobei OBJ1 und OBJ2 völlig keine Erbschaftsbeziehung haben. Es gibt zwei Möglichkeiten, dies zu erreichen: < /p>
[*]
Code: Select all
(obj1*)p
Code: Select all
(obj1*)(void*)p< /code> < /li>
< /ul>
Meine Frage ist:
Was sind die Unterschiede zwischen diesen beiden? Warum sollte GCC den zweiten Weg auswählen? > (p)