Path: csiph.com!weretis.net!feeder6.news.weretis.net!feeder7.news.weretis.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c++ Subject: Re: [QT creator on "nix"] - "outer" padding within arrays of structures - was getting a strict 8 bit (1 byte) array with no padding Date: Sat, 23 Nov 2019 12:35:22 -0800 Organization: None to speak of Lines: 51 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="dfad491d1778b0c95e43bf538d0f4f21"; logging-data="609"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/kmKJ5iVEkv/4RfvsIvXKu" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) Cancel-Lock: sha1:pTRV6re5gTMkyXpHY9tv7QpUrxs= sha1:qb4sAf2qhcySJmGLxQWw9LeT0R4= Xref: csiph.com comp.lang.c++:70019 Soviet_Mario writes: > I have realized I don't know an aspect of padding vs packing > management. > > In the other thread I have been explained of the aspects of > padding/packing INSIDE a given structure/class/union and > similar. > > But now I realize I know nothing for sure about packing in > between different element within arrays of such > structure/class/union and similar. Packing for arrays is not a thing. Every object type has a constant size, which you can query using sizeof. Each element of an array is allocated the size of the element's type. For example, given: some_type arr[N]; it's guaranteed that sizeof (arr) == N * sizeof (some_type). (We can use that to determine the number of elements in an array: sizeof arr / sizeof arr[0]). If a non-standard #pragma pack has been applied to some_type itself, that might change the value of sizeof (some_type), but it does not change the relationship between sizeof (some_type) and sizeof (some_type[N]). The size of any type is a multiple of its alignment, which is what makes arrays possible. If some_type is struct some_type { long big; char small; }; then there is likely to be padding after small, precisely so that in an array of some_type elements each big sub-element is correctly aligned. The padding is within the structure. There is no padding between array elements. [...] -- Keith Thompson (The_Other_Keith) kst-u@mib.org Working, but not speaking, for Philips Healthcare void Void(void) { Void(); } /* The recursive call of the void */