2017-10-08 23 views
1

J'ai une classe dont je vais littéralement instancier des milliards. J'ai fait de mon mieux pour y mettre le moins de données possible, et je l'ai ramené à 10 octets lorsqu'il a été compilé pour une architecture x64: un unsigned short int et un size_t. Lorsque je souris sur sizeof(myclass) (dans VS), cependant, il signale 16 octets. Si je commente l'un des champs, la taille de la classe est ce que vous attendez, 10 octets et 2 octets respectivement.Puis-je forcer une classe C++ à compiler en utilisant le minimum d'espace?

Existe-t-il un moyen d'indiquer au compilateur d'utiliser seulement 10 octets pour ma classe?

+1

Essayez '#pragma pack' – PaulMcKenzie

+0

Merci! Jetez '#pragma pack (2)' dans une réponse, et je vais le marquer comme la meilleure réponse. – dfoverdx

+0

@dfoverdx utilise 'pack (1)' au lieu de 2 –

Répondre

0

#pragma pack peut rendre vos structures plus petites. D'un autre côté, cela peut rendre la récupération des données de membre plus lente, puisque l'alignement des octets n'est pas garanti. En conséquence, le compilateur aura besoin d'instructions supplémentaires pour récupérer les données à partir de différents emplacements de mémoire. Pour plus d'informations, ce lien a un excellent post: #pragma pack effect