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 > [EMAIL PROTECTED] > http://lists.lugod.org/mailman/listinfo/vox-tech _______________________________________________ vox-tech mailing list [EMAIL PROTECTED] http://lists.lugod.org/mailman/listinfo/vox-tech
