Mail Archives: djgpp/1999/06/13/17:53:15
From: | "Al Morgan" <muaddib AT proaxis DOT com>
|
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 <skb AT xmission DOT removethis DOT com> 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]
- Raw text -