chris@mimsy.UUCP (03/01/87)
Following much ado about extensible arrays inside structures, e.g., struct string { int s_len; /* actual length */ int s_space; /* space allocated */ char s_text[0]; /* really longer */ }; ... /* alloc is a malloc front end that aborts on failure */ s = (struct string *) alloc(sizeof (*s) + length); s->s_len = length; s->s_space = length; ... in article <1222@dg_rtp.UUCP> meissner@dg_rtp.UUCP (Michael Meissner) writes: >yea, and malloc will also add anywhere of 0-64 extra bytes in the >memory allocation. Extreme micro optimizations like this can backfire. True, but it is worth pointing out that if your malloc has a constant rounding, this wins; and even if it has a variable rounding, if the rounding is proportionate to the size of the object being allocated and the overhead plus rouding for the `normalised' structure (here 2*sizeof(int) + sizeof(char *)) is larger than the average rounding for the extensible version, the extensible version still wins. It may even be possible to determine this at run time, and self-configure. (It is also worth pointing out that this takes a lot of effort.) -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690) UUCP: seismo!mimsy!chris ARPA/CSNet: chris@mimsy.umd.edu