• Robert Haas's avatar
    Introduce dynamic shared memory areas. · 13df76a5
    Robert Haas authored
    Programmers discovered decades ago that it was useful to have a simple
    interface for allocating and freeing memory, which is why malloc() and
    free() were invented.  Unfortunately, those handy tools don't work
    with dynamic shared memory segments because those are specific to
    PostgreSQL and are not necessarily mapped at the same address in every
    cooperating process.  So invent our own allocator instead.  This makes
    it possible for processes cooperating as part of parallel query
    execution to allocate and free chunks of memory without having to
    reserve them prior to the start of execution.  It could also be used
    for longer lived objects; for example, we could consider storing data
    for pg_stat_statements or the stats collector in shared memory using
    these interfaces, rather than writing them to files.  Basically,
    anything that needs shared memory but can't predict in advance how
    much it's going to need might find this useful.
    
    Thomas Munro and Robert Haas.  The original code (of mine) on which
    Thomas based his work was actually designed to be a new backend-local
    memory allocator for PostgreSQL, but that hasn't gone anywhere - or
    not yet, anyway.  Thomas took that work and performed major
    refactoring and extensive modifications to make it work with dynamic
    shared memory, including the addition of appropriate locking.
    
    Discussion: CA+TgmobkeWptGwiNa+SGFWsTLzTzD-CeLz0KcE-y6LFgoUus4A@mail.gmail.com
    Discussion: CAEepm=1z5WLuNoJ80PaCvz6EtG9dN0j-KuHcHtU6QEfcPP5-qA@mail.gmail.com
    13df76a5
dsa.c 72.5 KB