Est-il une garantie d'alignement de l'adresse de retour par le C++'s nouvelle opération?

Plus de programmeur expérimenté sait alignement des données est important pour la performance du programme. J'ai vu un programmeur écrit le programme qui allouent une plus grande taille de la mémoire tampon qu'ils ont besoin, et utiliser le alignés pointeur que commencer. Je me demande dois-je faire dans mon programme, je n'ai aucune idée de quelles sont les garanties de l'alignement de l'adresse retournée par le C++'s nouvelle opération. J'ai donc écrit un petit programme pour tester

for(size_t i = 0; i < 100; ++i) {
    char *p = new char[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
    short *p = new short[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
    float *p = new float[123];
    if(reinterpret_cast<size_t>(p) % 4) {
        cout << "*";
        system("pause");
    }
    cout << reinterpret_cast<void *>(p) << endl;
}
system("pause");

Le compilateur, je suis à l'aide de Visual C++ Express 2008. Il semble que toutes les adresses de la nouvelle opération retournés sont alignés. Mais je ne suis pas sûr. Donc ma question est: est-il garanti? Si elles ont la garantie, je n'ai pas à aligner moi-même, si ce n'est, je dois le faire.

InformationsquelleAutor Fang-Pen Lin | 2009-02-03