Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.std.c > #1637

Re: VLAs use less stack

From jgk@panix.com (Joe keane)
Newsgroups comp.std.c
Subject Re: VLAs use less stack
Date 2012-09-01 16:09 +0000
Organization Public Access Networks Corp.
Message-ID <k1tc0j$mad$1@reader1.panix.com> (permalink)
References <k1q5bu$49h$1@speranza.aioe.org>

Show all headers | View raw


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;
}

Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


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