From: "Al Morgan" Newsgroups: comp.os.msdos.djgpp Subject: Re: Pointers, functions and memory Date: Sun, 13 Jun 1999 13:58:44 -0700 Organization: Posted via RemarQ Communities, Inc. Lines: 60 Message-ID: <929307582.390.40@news.remarQ.com> References: <37606970 DOT 14959285 AT news DOT xmission DOT com> NNTP-Posting-Host: 198.106.198.180 NNTP-Posting-Date: Sun, 13 Jun 1999 20:59:42 GMT X-Trace: 929307582.390.40 4VELK9AUPC6B4C66AC qube-02.us-ca.remarq.com X-Complaints-To: newsabuse AT remarQ DOT com X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2314.1300 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Scott Brown wrote in message news:37606970 DOT 14959285 AT news DOT xmission DOT com... > I have a couple of unrelated questions here...I'd really appreciate it > if someone can clue me in on either issue. > > First question (this might be more of a C question than a DJGPP > question, but here goes): I have a routine that stores arbitrary data > into memory using a scheme where a void* is cast to a specific pointer > type by a case statement. In addition to a gamut of standard types, I > have some data types that needs to be processed separately at runtime. > My idea for this is to use that void* data pointer to hold a function > pointer, which can be cast to the appropriate type and invoked to > handle the data at hand. So I have code which goes something like > this: > extern void *p1, *p2, *p3; > *(int*)p1 = 42; > *(float*)p2 = 3.14; > ((int(*)(int, char *))p3)(99, "done"); > > Is this a safe thing to do? Can a data pointer be safely interchanged > with a function pointer? If it's okay under DOS/DJGPP, will it still > work after I port my program to Unix/GCC? > > > Second question: When my DJGPP program executes a non-DJGPP DOS > program as a child process, is the child's conventional memory space > affected by my program's memory allocations? Is DJGPP's conventional > memory footprint consistent and/or predictable? Are there any ways I > can minimize that footprint for the duration of the system/spawn call? > > > Thanks, > -Scott > > > > > > > ...okay, so it's six questions. Humor me, willya? That might not be so safe, using the same variables to point to both data and functions. What if you were to call a pointer-function while it still pointed to a variable? I'm not sure, but it would either start executing random instructions (not good), or if it's really smart, generate a runtime error (not good, but better). Perhaps instead of making pointers to functions, you can put them in a class, and have a flag variable, telling you if the function is really set to a function. As for the second question, I really don't know. Does malloc(...) use pure C to allocate memory, or does it call a higher level OS controller memory thingy? If it's the first, you'd probably have problems, the second would be O.K. I hope this helps the least bit, Al [muaddib AT proaxis DOT com]