Home »
Public Forums »
archive »
CALL_EXTERNAL and VAX/VMS
CALL_EXTERNAL and VAX/VMS [message #2968] |
Wed, 19 October 1994 07:07 |
danny
Messages: 1 Registered: October 1994
|
Junior Member |
|
|
I have two questions concerning the use of CALL_EXTERNAL and VAX/VMS.
I'm using (have to use):
IDL. Version 3.6.1a (vms vax).IDL.
VAX/VMS V5.5
FORTRAN without VAX/VMS extensions
The first question is about the exact link statement that is to be used.
How to link to get a shared image that can be used by CALL_EXTERNAL?
If you use something like `$ link/shareable=tmp_share.exe tmp.obj'
the resulting executable file will become as large as is needed to
store all allocated variables.
The following DCL script will show what happens
$ ! Create the FORTRAN program tmp.for
$ create tmp.for
program tmp
integer*4 a(500,500)
end
$ ! Compile tmp.for
$ fortran tmp.for
$ ! Link tmp.obj and create a normal executable image
$ link/executable=tmp_exe.exe tmp.obj
$ ! Link tmp.obj and create a shareable image
$ link/shareable=tmp_share.exe tmp.obj
$ ! Show the sizes of both images
$ directory/size tmp_*.exe
The result of this will be
TMP_EXE.EXE;1 4
TMP_SHARE.EXE;1 1959
Is there any way/option/parameter/qualifier to persuade the VMS linker
to create smaller files?
I've already tried DZRO_MIN=1 in the options file, but even though I
understand from the manual that it should bring the filesize down to
something close to the size of TMP_EXE.EXE;1 it doesn't seem to help.
Is this a bug in the linker? Something in VMS 5.5? Is there a workaround?
This is somewhat annoying because our executables are quite large
(typically 20,000 blocks) and loading them takes longer than needed.
The second question is about the removal of shared images that have been
CALL_EXTERNALed.
Is it possible to have shared images released by IDL after they have
been called? Not only would it be helpful in debugging, because you
would no longer need to `EXIT' before you can try a newer shared image,
but since we have a reasonable number of executables that take up
10Mb of memory (see above), not much can be done with IDL (or in fact
the entire machine) after more than a few shared images have been
called.
If there is a way to purge shared images after a CALL_EXTERNAL I'd love
to know. If there's a work-around it's welcome too.
And remember, the source code has to be in FORTRAN without VMS extensions.
Thanks in advance for helping,
Danny R. Boxhoorn
Space Research Organization Netherlands
P.O.Box 800 E-Mail:
9700 AV GRONINGEN danny@sron.rug.nl
THE NETHERLANDS danny@astro.rug.nl
|
|
|
Current Time: Wed Oct 08 14:01:02 PDT 2025
Total time taken to generate the page: 0.00462 seconds