l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2003 Jan 21 14:37

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] lame question on memory allocation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] lame question on memory allocation

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

vox-tech mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Sunset Systems
Who graciously hosts our website & mailing lists!