[vox-tech] lame question on memory allocation

Tim Riley vox-tech@lists.lugod.org
Tue, 21 Jan 2003 13:33:34 -0800


Peter Jay Salzman wrote:

> you'd think by now i'd know stuff like this.  i'm embarrased to have to
> ask this, but here it goes.

Don't be -- memory management is complicated and gets more so
everytime they improve the hardware. As a result, the vocabulary
can get esoteric.

>
>
> i'm reading the man page for electric fence, and i'm not fully
> understanding the sections on EF_ALIGNMENT and "WORD-ALIGNMENT AND
> OVERRUN DETECTION".   i feel like i "almost" understand them.
>
> i think i understand the concept of memory page as being the minimum
> chunk of memory the kernel handles internally (8192 bytes minimum
> allocation of memory on x86) and alignment, but i guess i don't know
> what a word is.
>

More specifically, a page is a chunk of memory that the operating system
(or hardware) copies to disk (swap space) when you run out of memory -- aka
"page fault." To optimize this process, memory is allocated by the page.

>
> for example, the man page says that malloc() may be required to return
> word aligned memory pages, so in the diagram:
>

This implies that malloc() may return more memory than you request.
It might be that malloc( 1 ) gets you an entire page -- 4 or 8 K. However,
subsequent malloc( 1 )s will just fill in the existing page. When it fills
up you
get a new page.

The gcc complier knows about page alignments and will allocate
memory requested on the stack effeciently. So, whenever I need
string space, I'll do: "char buffer[ 1024 ];" because I believe that
"char buffer[ 1000 ];" gets me 1024 anyway.

>
>          1 page allocated by malloc()
> x       ------------
> x+1     |          |
> x+2     | 8192     |
>         | bytes on |
>         |   x86    |
>         |          |
>         ------------
>
> i guess that places a restriction on what "x" is, but because i don't
> know what a word is, i don't know what that restriction is.
>
> what's a word?  :)
>

A word is the minimum amount of addressable memory. So, if you
declare "char c;" on the stack of a 386, even though you plan on storing
only 8 bits, more bits are available. To figure out the word size, take
the log based 2 of the constant UINT_MAX + 1 (in limits.h) -- probably
it's 32.

>
> or does it mean that there's a restriction on *size* of the page and not
> the starting point?
>

The page size is set by the hardware, and the Linux kernel manages paging
transparently. I'm surprised to hear about an application that is forcing
you
to make decisions about memory alignment.

>
> pete
>
> --
> First they ignore you, then they laugh at you, then they fight you,
> then you win. -- Gandhi, being prophetic about Linux.
>
> Fingerprint: B9F1 6CF3 47C4 7CD8 D33E 70A9 A3B9 1945 67EA 951D
> _______________________________________________
> vox-tech mailing list
> vox-tech@lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech