home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / dld / test / overlay / overlay.c < prev   
C/C++ Source or Header  |  1996-09-28  |  1KB  |  50 lines

  1. #include <stdio.h>
  2. #include <sys/time.h>
  3. #include <sys/resource.h>
  4. #include "dld.h"
  5.  
  6. /* strings to hold the next object file to be linked.  On invocation, the
  7.    linked-in function will modify this string so that a different file will
  8.    be loaded next time. */
  9. char *p = "chain1.o";
  10.  
  11. /*
  12.  *  To show how different modules can be overlayed onto the same memory
  13.  *  sections.
  14.  */
  15. main (argc, argv)
  16. int argc;
  17. char *argv[];
  18. {
  19.     struct rusage rusage;
  20.  
  21.     (void) dld_init (argv[0]);
  22.  
  23.     /* Use the max. memory allocation to show that all the dynamically
  24.        linked in modules indeed share the (more or less) same memory
  25.        sections.  Each module contains a large static array.  If they are
  26.        not overlayed, the max. RSS will increase. */
  27.     
  28.     getrusage (RUSAGE_SELF, &rusage);
  29.     printf ("MAX_RSS = %d page.\n", rusage.ru_maxrss);
  30.  
  31.     do {
  32.     register void (* func) ();
  33.     register int dld_errno;
  34.     
  35.     printf ("Linking %s\n", p);
  36.     if (dld_errno = dld_link (p)) {
  37.         fprintf (stderr, "Error linking %s -- code = %d\n", p, dld_errno);
  38.         exit ();
  39.     }
  40.  
  41.     getrusage (RUSAGE_SELF, &rusage);
  42.     printf ("MAX_RSS = %d page.\n", rusage.ru_maxrss);
  43.     if (dld_function_executable_p("chain")) {
  44.         func = (void (*) ()) dld_get_func ("chain");
  45.         (* func) ();
  46.     }
  47.     dld_unlink_by_symbol ("chain", 0);
  48.     } while (p);
  49. }
  50.