A Memory Trace

Let's thoroughly trace an example of​ simple memory access in this lesson.

Memory accesses in array.c

Before closing, we now trace through a simple memory access example to demonstrate all of the resulting memory accesses that occur when using paging. The code snippet (in C, in a file called array.c) that we are interested in is as follows:

int array[1000];
...
for (i = 0; i < 1000; i++)
     array[i] = 0;

We compile array.c and run it with the following commands:

prompt> gcc -o array array.c -Wall -O
prompt> ./array

Assembly code

Of course, to truly understand what memory accesses this code snippet (which simply initializes an array) will make, we’ll have to know (or assume) a few more things. First, we’ll have to disassemble the resulting binary (using objdump on Linux, or otool on a Mac) to see what assembly instructions are used to initialize the array in a loop. Here is the resulting assembly code:

1024 movl $0x0,(%edi,%eax,4)
1028 incl %eax
1032 cmpl $0x03e8,%eax
1036 jne  0x1024
...