Ich hatte immer angenommen, dass die Größe eines Arrays von N-Elementen des Typs T
, wie von sizeof
zurückgegeben wurde garantiert, genau N mal sizeof(T)
sein.Ist die Größe von (T [N]) == N * sizeof (T) garantiert?
Die comments on this question ließ mich daran zweifeln. Es gibt Ansprüche von seriösen Benutzern, dass Arrays Padding enthalten können, die die Gleichheit brechen würde. Natürlich gibt es solche Plattformen nicht, aber sind sie erlaubt?
Wenn erlaubt, würde dies viele gemeinsamen Idiome brechen, wie etwa den benötigten Speichers für ein Array mit N * sizeof(T)
Berechnung, oder die Anzahl der Elemente in einem Array-Berechnungs sizeof(a)/sizeof(a[0])
verwenden.
Da "sizeof" immer mit dem statischen Typ und nicht mit Laufzeitwerten zu tun hat, denke ich nicht, wie sich der tatsächliche Speicher verhält. Ob 'sizeof (T [N]) == N * sizeof (T)' ist ein Typsystem und Vorverarbeitungsaspekt. –
@AsadSaeeduddin - richtig, ich denke nicht, dass ich sonst angedeutet habe? Oder vielleicht war es eine Antwort auf einen jetzt gelöschten Kommentar. – BeeOnRope
Ich habe die Diskussion aus dem Thread kommentiert, mit dem du verlinkt warst. Es kann sehr gut der Fall sein, dass es Laufzeiten gibt, in denen Arrays mehr Platz einnehmen als die Summe ihrer Elementgrößen, aber dies hat keinen Einfluss darauf, dass "sizeof (T [N])" 'N * sizeof (T) ist. '. –