From: Nate Eldredge Newsgroups: comp.os.msdos.djgpp Subject: Re: allocating memory using DPMI Date: Wed, 20 Oct 1999 13:17:25 -0700 Organization: Harvey Mudd College Lines: 51 Message-ID: <380E2355.13C34BD0@hmc.edu> References: <7ukq18$cde$1 AT nnrp1 DOT deja DOT com> NNTP-Posting-Host: mercury.st.hmc.edu Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: nntp1.interworld.net 940450672 37400 134.173.45.219 (20 Oct 1999 20:17:52 GMT) X-Complaints-To: usenet AT nntp1 DOT interworld DOT net NNTP-Posting-Date: 20 Oct 1999 20:17:52 GMT X-Mailer: Mozilla 4.61 [en] (X11; U; Linux 2.2.13pre12 i586) X-Accept-Language: en To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com kriiid AT my-deja DOT com wrote: > > Eli Zaretskii wrote: > > > >On Sun, 17 Oct 1999 kriiid AT my-deja DOT com wrote: > > > >> Well, the first question is: when I get SIGSEGV there is written > >> information about segments. What does limit section mean? > > > >It's one less than the segment size in bytes. > > > >> I thought > >> this is size of segment. But now I don't think so, cause values like > >> 0x8ffff are not really possible > > > >Why not? 0x8ffff is 589823 bytes: not too much for a typical DJGPP > >program. Especially since 524288 bytes (512K) out of this amount is > >the run-time stack, which is allocated at startup in its entirety. > > Well... I ment it's incredibly small. At least for me. So what if I'd > like to allocate ie. 10 MB? Would djgpp extend this segment to ~11MB? Yes. > It look pretty inefficient (if it is done for every malloc). Not really. It's a single DPMI call, which IIRC just has to update the LDT and reload the selector. Also, it's only done in sbrk, when malloc's pool runs out (it grows it in big chunks and reuses freed memory), and sbrk is expensive anyway. > >> the most essential function - allocating memory (501h). So I > >> made program which just allocates some memory. I run it under > windows. > >> So, linear address is 05DAC000h. And now the funny part. Base address > >> of DS/CS is 83046000h ;-). So now I've got a problem. > > > >Please explain why this is ``a problem''. I don't see any problem > >here. You might base your judgement on some incorrect assumptions. > > May be. > Well I try to access this memory using DS or CS. So the offset would > have to be negative. Nothing wrong with that. A pointer is an unsigned quantity. Any code which depends on its "sign" is broken and should be fixed. -- Nate Eldredge neldredge AT hmc DOT edu