私はいつも、T
タイプのN要素の配列のサイズが、sizeof
によって返され、正確にN倍のsizeof(T)
であることが保証されていると仮定していました。sizeof(T [N])== N * sizeof(T)は保証されていますか?
comments on this questionは私にそれを疑わせました。評判の良いユーザーからは、配列にはパディングが含まれている可能性があるという主張があります。もちろん、そのようなプラットフォームは存在しないかもしれませんが、許可されていますか?
許容される場合、N * sizeof(T)
の配列の必要な記憶域の計算や、sizeof(a)/sizeof(a[0])
を使用した配列の要素数の計算など、多くの一般的な慣用句が使用できなくなります。
「sizeof」は常に実行時の値ではなく静的な型を扱っていることを考えると、実際のメモリがどのように動作するかは考えません。 'sizeof(T [N])== N * sizeof(T)'が型システムでありプリプロセッサの関心事であるかどうか。 –
@AsadSaeeduddin - 正しい、私は別のことを暗示しているとは思わない?それとも今削除されたコメントへの返事だったのでしょうか? – BeeOnRope
あなたがリンクしたスレッドからの議論にコメントしていました。配列が要素サイズの合計より多くのスペースを占めるランタイムがあるかもしれませんが、sizeof(T [N])が 'N * sizeof(T)であるという事実には関係しません'。 –