una riga di codice vale più di mille parole :) Ecco il mio problema:C++ allineamento memoria questione
/* Platform specific 16-byte alignment macro switch.
On Visual C++ it would substitute __declspec(align(16)).
On GCC it substitutes __attribute__((aligned (16))).
*/
#define ALIGN_16 ...
struct ALIGN_16 A {...};
A* ptr = new A;
A* ptr2 = new A[20];
assert(size_t(ptr) % 16 == 0);
for (int i=0; i<20; ++i)
assert(size_t(ptr2+i) % 16 == 0);
assert(sizeof(A) % 16 == 0);
Posso aspettare che tutte le asserzioni passano su piattaforme con supporto SSE? Grazie.
MODIFICA. Risposta parziale Ho fatto qualche test con VS2008, GCC e ICC. Il compilatore MS ha allineato sia ptr e ptr2, ma GCC e ICC non sono riusciti ad allineare ptr2.
Perché una serie di 20 Come? – John
Appena fuori dalla mia testa. Stavo vagando, se anche ogni elemento dell'array è allineato. – watson1180
Gli elementi di una matrice allocata correttamente sono garantiti dallo standard per essere allineati correttamente per il tipo in questione. Tuttavia, tale allineamento è un dettaglio di implementazione e potrebbe in teoria essere di un byte (cioè allineamento impacchettato). –