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


Groups > comp.lang.c > #91640

Re: Extending C with GC?

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: Extending C with GC?
Date 2016-08-04 14:01 +0200
Organization A noiseless patient Spider
Message-ID <nnvaqt$faq$1@dont-email.me> (permalink)
References (1 earlier) <lninvl5sjx.fsf@kst-u.example.com> <lnwpjx1obh.fsf@kst-u.example.com> <nnu9nh$nl8$1@dont-email.me> <nnv02k$dom$1@dont-email.me> <bf86c23f-565f-475c-9843-4733f66ff39c@googlegroups.com>

Show all headers | View raw


On 04/08/16 13:09, Malcolm McLean wrote:
> On Thursday, August 4, 2016 at 9:58:08 AM UTC+1, David Brown wrote:
>>
>> For much of my work (small systems embedded programming), the
>> non-determinism of standard malloc/free is too much - dynamic memory
>> allocation is avoided whenever possible.  It is usually better to have
>> static allocation with the memory sized to suit the worst case, than to
>> have the risk of malloc failures or heap fragmentation problems.
>>
> Calls to malloc() usually fit one of three patterns
> 
> Caller frees:
> 
> ptr = malloc(N);
> ...
> free(ptr);
> 
> Object constructor / destructor:
> 
> ptr = constuctor(params); // allocates an object
> ... // no change to ptr's memory internals
> destructor(ptr);  // destroys it
> 
> Graph creation, manipulation and destruction:
> 
> node = makenode();     // all nodes small and of identical size
> while(condition)
>    node->add( makenode());
> while(othercondition)
>    node->release(childnodeid);
> 
> ...
> destroyallnodes():
> 
> 
> The first two you can service with a stack-based allocator, as long as 
> you are extremely careful with the second pattern.
> The third pattern you can service with a fixed block allocator.
> 
> Both of those allocators run a lot faster than malloc(), and neither is subject
> to fragmentation. However the fixed block allocator can be a bit of a memory
> hog if you don't need most of the blocks  for most of the runtime of the 
> program, and you need several different block sizes so more than one allocator.
> 


That may be your experience, but it is not /my/ experience.

A stack-based allocator is close to useless.  If you know the size of
the object you are dealing with, you just make the object a local
variable - there is no need to mess about with allocators and an extra
layer of indirection.  If you don't know the size, the chances are high
that it is an array and a VLA will do the job.  Failing that, alloca()
already exists.

Stack allocation has the advantage of speed and simplicity, you don't
need to check the return (for alloca) or have other error checking code,
there is no fragmentation, there is no overhead to track the heap, and
there is no need to "free" anything.  But stack space can be limited
(depending on your target system, OS, configuration, etc.), and if
something /does/ go wrong, it usually goes spectacularly wrong without
scope for testing or recovery.

As for your idea that most dynamic memory usage is either temporary and
local to a function, or part of a graph - well, I think you spend a bit
too much time working with graphs.  You seem to see them everywhere.

You are, of course, correct that if you would be dynamically allocating
memory in blocks of a fixed (at compile time) size, such as may be the
case for some data structures, then a specialised block or pool
allocator will be more efficient than a general heap manager.  But that
does not help for dynamic memory allocations of varying sizes - buffers,
strings, file input and output, etc.

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


Thread

Extending C with GC? luser droog <luser.droog@gmail.com> - 2016-07-31 15:31 -0700
  Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-07-31 15:52 -0700
    Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-07-31 17:21 -0700
    Re: Extending C with GC? Jean-Marc Bourguet <jm@bourguet.org> - 2016-08-01 20:34 +0200
      Re: Extending C with GC? supercat@casperkitty.com - 2016-08-01 12:14 -0700
      Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-01 12:46 -0700
        Re: Extending C with GC? "James R. Kuyper" <jameskuyper@verizon.net> - 2016-08-01 15:56 -0400
          Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-01 14:28 -0700
        Re: Extending C with GC? Jean-Marc Bourguet <jm@bourguet.org> - 2016-08-01 23:37 +0200
          Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-01 15:03 -0700
          Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-02 00:11 +0200
            Re: Extending C with GC? "James R. Kuyper" <jameskuyper@verizon.net> - 2016-08-01 18:19 -0400
              Re: Extending C with GC? BGB <cr88192@hotmail.com> - 2016-08-02 12:46 -0500
    Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-03 15:26 -0700
      Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-03 15:49 -0700
        Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-04 14:07 +1200
          Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-03 19:26 -0700
            Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-04 14:55 +1200
          Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-03 20:38 -0700
            Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-04 05:10 -0700
              Re: Extending C with GC? Siri Cruise <chine.bleu@yahoo.com> - 2016-08-04 05:57 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-04 06:13 -0700
              Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-05 07:24 +1200
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-04 12:47 -0700
                Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-04 23:32 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-05 10:09 +0100
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-05 20:32 +1200
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-05 06:14 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 04:14 -0700
                Re: Extending C with GC? Melzzzzz <mel@zzzzz.com> - 2016-08-06 13:23 +0200
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 04:38 -0700
                Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-06 04:34 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 05:28 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 06:05 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 06:12 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-06 14:02 +0100
                Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-06 06:11 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-06 14:50 +0100
                Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-06 07:57 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-06 17:02 +0100
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-06 19:20 +0200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-06 14:27 +0100
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-06 14:45 +0100
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 09:59 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-06 19:38 +0100
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 17:03 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 09:54 +0100
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-07 21:53 +1200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 11:34 +0100
                Re: Extending C with GC? anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2016-08-07 12:06 +0000
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-07 14:10 +0100
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 15:38 +0100
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 14:32 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 23:44 +0100
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 16:12 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 01:42 +0100
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 18:56 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 10:20 +0100
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-08 09:39 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-08 02:30 +0100
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 20:15 +0100
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-08 01:24 +0100
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 02:08 +0100
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 18:49 -0700
                Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-08 03:28 +0100
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 12:14 +0100
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 07:37 +1200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 20:56 +0100
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 08:11 +1200
                Re: Extending C with GC? Melzzzzz <mel@zzzzz.com> - 2016-08-07 22:19 +0200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 22:23 +0100
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-07 14:29 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-07 22:36 +0100
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-07 15:04 -0700
                Re: Extending C with GC? jameskuyper@verizon.net - 2016-08-07 15:19 -0700
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 00:04 +0100
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-07 16:20 -0700
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 15:21 +1200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 10:35 +0100
                Re: Extending C with GC? Gareth Owen <gwowen@gmail.com> - 2016-08-08 18:13 +0100
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-08 11:53 -0700
                Re: Extending C with GC? raltbos@xs4all.nl (Richard Bos) - 2016-08-10 12:58 +0000
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-10 07:05 -0700
                Re: Extending C with GC? Ken Brody <kenbrody@spamcop.net> - 2016-08-10 12:29 -0400
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 21:15 +0100
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-08 08:57 -0700
                Re: Extending C with GC? luser droog <luser.droog@gmail.com> - 2016-08-07 15:37 -0700
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 14:58 -0700
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 15:26 +1200
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-08 10:26 +0200
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 21:13 +1200
                Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-08 10:41 +0100
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-08 12:00 +0200
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 22:07 +1200
                Re: Extending C with GC? David Brown <david.brown@hesbynett.no> - 2016-08-08 12:57 +0200
                Re: Extending C with GC? Gareth Owen <gwowen@gmail.com> - 2016-08-08 18:12 +0100
                Re: Extending C with GC? Ian Collins <ian-news@hotmail.com> - 2016-08-08 21:25 +1200
                Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-08 02:57 -0700
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-07 13:28 -0700
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-07 05:42 -0700
                Re: Extending C with GC? Florian Weimer <fw@deneb.enyo.de> - 2016-08-07 11:49 +0200
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-06 19:18 +0200
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-06 12:35 -0700
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-06 19:27 +0200
                Re: Extending C with GC? "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2016-08-06 10:55 -0700
                Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-06 12:31 -0700
      Re: Extending C with GC? James Kuyper <jameskuyper@verizon.net> - 2016-08-03 22:36 -0400
        Re: Extending C with GC? David Brown <david.brown@hesbynett.no> - 2016-08-04 10:57 +0200
          Re: Extending C with GC? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-08-04 04:09 -0700
            Re: Extending C with GC? David Brown <david.brown@hesbynett.no> - 2016-08-04 14:01 +0200
        Re: Extending C with GC? supercat@casperkitty.com - 2016-08-04 07:52 -0700
      Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-08-04 08:57 -0700
        Re: Extending C with GC? supercat@casperkitty.com - 2016-08-04 09:19 -0700
          Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-04 12:30 -0700
            Re: Extending C with GC? supercat@casperkitty.com - 2016-08-04 15:21 -0700
              Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-04 16:50 -0700
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-05 07:31 -0700
          Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-08-05 16:01 -0700
        Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-04 21:00 +0200
          Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-04 20:26 +0100
            Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-05 10:37 +0200
              Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-05 15:52 +0100
              Re: Extending C with GC? antispam@math.uni.wroc.pl - 2016-08-21 00:09 +0000
                Re: Extending C with GC? Gareth Owen <gwowen@gmail.com> - 2016-08-21 08:58 +0100
                Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-21 10:48 +0200
                Re: Extending C with GC? "Pascal J. Bourguignon" <pjb@informatimago.com> - 2016-08-21 19:58 +0200
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-22 08:46 -0700
                Re: Extending C with GC? Öö Tiib <ootiib@hot.ee> - 2016-08-26 02:24 -0700
                Re: Extending C with GC? supercat@casperkitty.com - 2016-08-26 13:37 -0700
                Re: Extending C with GC? Melzzzzz <mel@zzzzz.com> - 2016-08-27 00:41 +0200
                Re: Extending C with GC? Öö Tiib <ootiib@hot.ee> - 2016-08-28 06:12 -0700
            Re: Extending C with GC? BartC <bc@freeuk.com> - 2016-08-05 10:06 +0100
              Re: Extending C with GC? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-08-05 15:26 +0100
          Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-08-05 08:11 -0700
            Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-05 17:43 +0200
              Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-08-05 15:28 -0700
        Re: Extending C with GC? BGB <cr88192@hotmail.com> - 2016-08-04 17:11 -0500
  Re: Extending C with GC? Tim Rentsch <txr@alumni.caltech.edu> - 2016-07-31 17:35 -0700
  Re: Extending C with GC? jacobnavia <jacob@jacob.remcomp.fr> - 2016-08-01 07:45 +0200
    Re: Extending C with GC? Keith Thompson <kst-u@mib.org> - 2016-08-01 08:49 -0700
    Re: Extending C with GC? supercat@casperkitty.com - 2016-08-01 09:06 -0700
      Re: Extending C with GC? Aleksandar Kuktin <akuktin@gmail.com> - 2016-08-05 18:11 +0000
        Re: Extending C with GC? luser droog <luser.droog@gmail.com> - 2016-08-05 11:24 -0700
  Re: Extending C with GC? "Chris M. Thomasson" <invalid@invalid.invalid> - 2016-08-08 22:12 -0700

csiph-web