Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Keith Thompson <kst-u@mib.org> |
|---|---|
| Newsgroups | comp.std.c |
| Subject | Re: VLAs use less stack |
| Date | 2012-09-01 11:45 -0700 |
| Organization | None to speak of |
| Message-ID | <lnzk59h9ak.fsf@nuthaus.mib.org> (permalink) |
| References | <k1q5bu$49h$1@speranza.aioe.org> <k1tc0j$mad$1@reader1.panix.com> |
jgk@panix.com (Joe keane) writes:
> In article <k1q5bu$49h$1@speranza.aioe.org>,
> jacob navia <jacob@jspamsink.org> wrote:
>>int fn(size_t datasiz)
>>{
>> char databuf[datasiz<1000?datasiz:1];
>> char *p;
>> int result;
>>
>> if (datasiz >= 1000) {
>> p = malloc(datasiz);
>> if (p == NULL {/*error handler here */
>> return EXIT_FAILURE;
>> }
>> }
>> else p = & databuf[0];
>> // Use p here
>> if (datasiz>=1000) free(p);
>> return result;
>>}
>>
>>Here we have the best path: In MOST cases we will use a cheap stack
>>allocation. In the few cases where the data size is exceptionally big
>>we use the more costly heap allocation. We can handle an unbounded
>>amount of data.
>
> agreed
>
> But now you don't need VLAs!
>
> #define ZZ_STKSIZ 100
>
> int fn(size_t datasiz)
> {
> char databuf[ZZ_STKSIZ];
> char *p;
> int needfreep;
> int result;
>
> if (datasiz <= ZZ_STKSIZ)
> {
> p = &databuf[0];
> needfreep = 0;
> }
> else
> {
> p = malloc(datasiz);
> if (p == NULL)
> {
> /* rollback */
> return EXIT_FAILURE;
> }
> needfreep = 1;
> }
>
> /* use p */
>
> if (needfreep)
> free(p);
> return result;
> }
Yes, that's something I suggested in my own followup.
Using a VLA rather than a fixed-size array does save some memory
space, though. Taking your example of 100 bytes, a fixed-size
array means you *always* allocate 100 bytes (and more, via malloc(),
if you need more). A VLA lets you allocate only what you actually
need in all cases, as little as 1 byte.
So there are two performance questions. First, are malloc() and
free() expensive enough to justify the additional code complexity?
(I guess the answer to that is "sometimes".) Second, is the
memory saved by using a VLA rather than a *small* fixed-size array
worthwhile? Note that this saves much less memory than using
a VLA vs. using a fixed-size array that's big enough for *any*
possible requirement.
--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
Will write code for food.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-08-31 12:58 +0200
Re: VLAs use less stack Marc <marc.glisse@gmail.com> - 2012-08-31 14:10 +0000
Re: VLAs use less stack Marc <marc.glisse@gmail.com> - 2012-08-31 14:13 +0000
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-08-31 18:09 +0200
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-08-31 18:14 +0200
Re: VLAs use less stack John Nagle <nagle@animats.com> - 2012-09-01 12:24 -0700
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-01 22:57 +0200
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-01 22:59 +0200
Re: VLAs use less stack Keith Thompson <kst-u@mib.org> - 2012-08-31 11:42 -0700
Re: VLAs use less stack Marc <marc.glisse@gmail.com> - 2012-09-01 10:18 +0000
Re: VLAs use less stack Rui Maciel <rui.maciel@gmail.com> - 2012-09-01 19:18 +0100
Re: VLAs use less stack Marc <marc.glisse@gmail.com> - 2012-09-01 19:19 +0000
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-01 23:01 +0200
Re: VLAs use less stack Keith Thompson <kst-u@mib.org> - 2012-09-01 11:36 -0700
Re: VLAs use less stack Marc <marc.glisse@gmail.com> - 2012-09-01 19:05 +0000
Re: VLAs use less stack jgk@panix.com (Joe keane) - 2012-09-02 16:56 +0000
Re: VLAs use less stack Keith Thompson <kst-u@mib.org> - 2012-09-02 14:22 -0700
Re: VLAs use less stack jgk@panix.com (Joe keane) - 2012-09-04 00:39 +0000
Re: VLAs use less stack Jens Gustedt <jens.gustedt@loria.fr> - 2012-09-04 10:28 +0200
Re: VLAs use less stack John Nagle <nagle@animats.com> - 2012-09-04 11:31 -0700
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-04 17:02 +0200
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-02 23:28 +0200
Re: VLAs use less stack Keith Thompson <kst-u@mib.org> - 2012-09-02 14:37 -0700
Re: VLAs use less stack John Nagle <nagle@animats.com> - 2012-09-02 15:45 -0700
Re: VLAs use less stack Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2012-09-04 00:03 +0200
Re: VLAs use less stack jgk@panix.com (Joe keane) - 2012-09-01 16:09 +0000
Re: VLAs use less stack Keith Thompson <kst-u@mib.org> - 2012-09-01 11:45 -0700
Re: VLAs use less stack jacob navia <jacob@spamsink.net> - 2012-09-01 23:05 +0200
csiph-web