Listing 5 (FUNC_ARG.LST)

/* Note: compiler generated file has been edited
 * to fit magazine column.
 */

Line#  Source Line Microsoft C Compiler Version 6.00AX

     1 /*
     2  *  func_arg.c
     3  *  Jerzy Tomasik, 20-Jul-1991
     4  *  Stack usage during function calls
     5  *  in a C program
     6 */
     7
     8  #include <stdlib.h>
     9  #include <stdio.h>
    10
    11  struct big_struct
    12      {
    13      char array[1024];
    14      };
    15
    16 /*  A copy of big_struct is passed to this function
    17  *  on the stack, 1024 bytes of stack space are
    18  *  used to store the copy. The function does not
    19  *  have access to the original structure
    20  */
    21 void by_value(struct big_struct big, int dummy)
    22     {
    23     }

by_value  Local Symbols

Name          Class     Type           Size  Offset

big . . . . . param                           0004
dummy . . . . param                           0404

    24
    25 /*  An address of big_struct is passed to this function.
    26  *  This uses only 2 bytes of stack space (under small
    27  *  memory model), but any changes to the structure
    28  *  will be reflected in the original. This is NOT
    29  *  a copy!
    30  */
    31 void by_address(struct big_struct *big, int dummy)
    32     {
    33     }

by_address  Local Symbols

Name            Class   Type           Size  Offset

big . . . . . . param                         0004
dummy . . . . . param                         0006

    34
    35
    36 int main(void)
    37     {
    38     struct big_struct big;
    39     int dummy;
    40
    41     by_value(big, dummy);
    42
    43     by_address(&big, dummy);
    44
    45     return(0);
    46     }
    47

main  Local Symbols

Name            Class   Type           Size  Offset

dummy . . . . . auto                         -0402
big . . . . . . auto                         -0400


Global Symbols

Name            Class   Type           Size  Offset

by_address. . . global  near function   ***   0006
by_value. . . . global  near function   ***   0000
main. . . . . . global  near function   ***   000c

Code size = 004a (74)
Data size = 0000 (0)
Bss size  = 0000 (0)