11 Stimmen

Wann sollte ich _aligned_malloc() verwenden?

Ich habe den Legacy-Code gelesen, die in der benutzerdefinierten Speicher-Pooling-System invloves, dann fand ich, dass der Code _aligned_malloc verwendet. Ich frage mich, was ist diese Funktion und wann muss ich es verwenden.


Ich danke Ihnen allen.

Ich habe MSDN gelesen, aber was ich wollte, war die Antwort wie "Ein Beispiel für einen Grund für eine bestimmte Ausrichtung ist, um die Daten mit dem SSE-Befehlssatz auf x86 zu verwenden, wo die Daten auf ein Vielfaches von 16 ausgerichtet werden müssen".

Endlich habe ich verstanden, was diese Codes bedeuten. Nochmals vielen Dank.

1 Stimmen

Ein weiteres Beispiel: ARM-Prozessor. Er verlangt, dass alle Daten auf 4 Bytes ausgerichtet werden.

12voto

Viktor Punkte 3215

Diese Funktion ist nützlich, wenn die Ausrichtung der Speicherzuweisung für Sie wichtig ist.

Alignment bedeutet, dass der numerische Wert des zurückgegebenen Zeigers gleichmäßig durch eine bestimmte Zahl teilbar sein muss, d. h. ((unsigned int)ptr) % alignment sollte den Wert 0 haben.

Ein Beispiel für einen Grund, der eine bestimmte Ausrichtung erfordert, ist die Verwendung der Daten mit dem SSE-Befehlssatz auf x86, wo die Daten auf ein Vielfaches von 16 ausgerichtet sein müssen.

7voto

Hier ist ein Anwendungsfall, mit dem Sie vielleicht etwas anfangen können. In meinen 17 Jahren als C/C++-Entwickler habe ich nur einmal die _aligned_malloc() (WinOS-Implementierung) und memalign (POSIX-Implementierung) Kernel-Funktionen, und zwar bei der Codierung von Low-Level-Platten-E/A. Der Grund dafür ist, dass, wenn der OS I/O-Puffer nicht benutzt wird (z.B. in WinOS, wenn openfile() mit dem FILE_FLAG_NO_BUFFERING Flag) und beim Lesen/Schreiben auf die Platte verlangt das Betriebssystem, dass der Speicherblock an der Sektorgröße der Platte ausgerichtet wird; wenn die Sektorgröße der Platte 512 Bytes beträgt und Sie 1234 Bytes auf die Platte schreiben wollen, würde ich so vorgehen:

_aligned_malloc(1234, 512);

0voto

Bjoern Punkte 789

Haben Sie in der MSDN-Dokumentation nachgesehen? Dort finden Sie den entsprechenden Eintrag aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X