Kann der globale neue Operator basierend auf den Typeigenschaften des zugeordneten Objekts überschrieben werden?

8

Ich experimentiere mit der Aktualisierung unseres gepoolten Speicherblockzuweisungsspeichers, um die Vorteile von C ++ 11-Typen zu nutzen.

Gegenwärtig ist es möglich, die Zuweisung eines beliebigen Objekts an einen beliebigen Ort zu erzwingen, indem der Befehl überschrieben wird global new operator auf traditionelle Weise, zB

%Vor%

In vielen Fällen konnten wir die Leistung weiter verbessern, wenn Objekte abhängig von Typeigenschaften wie is_trivially_destructible an verschiedene Pools gesendet werden konnten. Ist es möglich, einen globalen globalen Template-Operator zu erstellen, der den zugewiesenen Typ und nicht nur die angeforderte Größe kennt? Ähnliches wie

%Vor%

Das Überschreiben des neuen Mitgliedsoperators in jeder Klasse funktioniert hier nicht; wir brauchen das wirklich, um automatisch für jede Zuteilung überall arbeiten zu können. Placement new wird auch nicht funktionieren: jedes Alloc muss aussehen wie

%Vor%

ist zu umständlich und die Leute werden vergessen, es zu benutzen.

    
Crashworks 24.05.2013, 23:29
quelle

1 Antwort

3

Die kurze Antwort ist nein. Die Zuweisungs- / Freigabe-Funktionen haben folgende Signaturen:

%Vor%

Die meisten Abweichungen von diesen Signaturen führen dazu, dass Ihre Funktion überhaupt nicht verwendet wird. In einer typischen Implementierung ersetzen Sie im Grunde genommen die Standardimplementierungen auf der Linker-Ebene - d. H. Die existierende Funktion hat einen bestimmten verfälschten Namen. Wenn Sie einer Funktion einen Namen geben, der zu einem identischen Ergebnis führt, wird sie stattdessen verknüpft. Wenn Ihre Funktion nicht den gleichen Namen hat, wird sie nicht verknüpft.

Eine Vorlage, wie Sie sie vorgeschlagen haben, könnte in einigen Fällen verwendet werden, aber wenn dies der Fall ist, würde dies zu undefiniertem Verhalten führen. Je nachdem, wie Sie zum Beispiel Kopfzeilen angeordnet haben, könnten Sie am Ende Code verwenden, der die Verwendung Ihrer Vorlage mit den Standardfunktionen mischt. An diesem Punkt wäre das Beste, auf das Sie hoffen könnten, dass er schnell und sauber abstürzt.

    
Jerry Coffin 25.05.2013, 00:16
quelle

Tags und Links