Hello, On Tue, 8 Aug 2023, Martin Uecker via Gcc-patches wrote:
> There at least three different size expression which could > make sense. Consider > > short foo { int a; short b; char t[]; }; > > Most people seem to use > > sizeof(struct foo) + N * sizeof(foo->t); > > which for N == 3 yields 11 bytes on x86-64 because the formula > adds the padding of the original struct. There is an example > in the C standard that uses this formula. > > > But he minimum size of an object which stores N elements is > > max(sizeof (struct s), offsetof(struct s, t[n])) > > which is 9 bytes. But should it really? struct sizes should usually be a multiple of a structs alignment, and if int is 4-aligned only size 12 would be correct. I don't see why one should deviate from that general rule for sizes for FAM structs. (I realize that the above is not about sizeof(), but rather bdos/bos, but I think it's fairly useful that both agree when possbible). Say, if you were to allocate an array of such struct foos, each having 3 elements in foo.t[]. You need to add 12 bytes to go to the next array element, not 9. (Of course arrays of FAM-structs are somewhat meh, but still). It's true that you would be allowed to rely on only 9 bytes of those 12 bytes (the rest being padding), so perhaps it's really the right answer for __bos, but, hmm, 12 seems to be "more correct" to my guts :-) Ciao, Michael.