wpe41.gif (23084 bytes)CIS3355: Business Data Structures
Fall, 2008
 

How do we know where a piece of datum is stored in RAM?

Although the answer to this question is that we don't know, because the address allocations in RAM are made at RUN-TIME and are based on available locations, we can still determine the address location of a variable using some c/c++ commands.

For example, lets declare a variable char x, and use the command %lu to find its location in RAM:

#include <stdio.h>
void main()
{
char x;
printf ("the RAM location of variable x is %lu understand?\n",x);
}

In the example above, the variable was declared as of type "char" which as we know only requires 1 byte of storage (in this case was the location 4294967244), if instead we use a variable of type "short", the variable will require 2 contiguous bytes, so forth for the different types of variables.

In some cases, in order to find some difficult locations we are forced to calculate the location utilizing some formulas.
One good example of calculate a location of a variable in ram is when using an Array.

For example, lets first create an array type short of 10 elements, and use the command %lu to find its base address in RAM:

#include <stdio.h>
void main()
{
short arrayX [10] = {1,2,3,4,5,6,7,8,9,10};
printf ("the RAM base address of arrayX is %lu understand?\n",arrayX);
}

In the example above, the array was declared as of type "short" which as we know requires 2 bytes of contiguous storage (in this case the first location or base address was 1245036), therefore we know that the first element of the arrays will occupy the locations 1245036 and 1245037, the second element of the array will occupy the locations 1245038 and 1245039, and so forth for all the elements of the array. As mentioned before, there is a better way to determine the location of an element in an array using a formula.

for example, in order to determine the location of the 2nd element (notice that the first element is 0) in this array will apply the formula:

Base Address + ( Offset * #bytes per element) = location
1245036       +     (    3  *  2  )  =  1245042

We can check this by modifying the program

#include <stdio.h>
void main()
{
short arrayX [10] = {1,2,3,4,5,6,7,8,9,10};
printf ("the location of the 3rd element of arrayX is %lu understand?\n",&arrayX[2]);
}

 

 

what is an Array? A data structure containing a fixed  number of contiguous storage elements all of the same type

What is Random Access Memory? Random Access Memory is used to temporarily store information that the computer is working with. It is the component in the computer where most programs are loaded. These programs in RAM perform their functions and operate to give the user the required results.

Most RAM memory is stored in chips (integrated circuits ICs) that are found on the motherboard of a computer. Memory chips are normally only available as part of a card called a module. Below are examples of a SIMM (single in-line memory module), a DIMM (dual in-line memory module), and a SODIMM (small outline dual in-line memory module) from left to right respectively.

 

                                      

 

                                          

 

 

 

How does RAM store data

    RAM consists of many capacitors and transistors. A capacitor and a transistor are paired together to make a memory cell. The capacitor represents one "bit" of data, the transistor is able to change the state of the capacitor to either a 0 or a 1. the Zero's and ones when read in a sequence represent the code which the computer understands. This is called binary data because there are only two states that the capacitor can be in.

 

 

When we reserve bits of storage for a given datum, for example in the following C Declarations:

 

         
 

Char a = ?c?

 

 

 

Short b = 50

 

 

 

Int c = 5487

 

 

 

 

 

 

 

Remember, characters require 8-bits of storage (1-byte), shorts require 16-bits of storage (2-bytes), and integers/longs require 32-bits of storage (4-bytes).

1.                we know that we are reserving 7-bytes of storage ? 1-byte for a, 2 contiguous bytes for b, and 4 contiguous bytes for c

2.                we are associating the locations with variable names (Location a,b,c)

3.                we are initializing location a with the character ?c? (ASCII = 99, 011000112), location b with the value 50 (00000000-001100102), and location c with  the value 5487 (00000000-00000000-00010101-011011112)

So the question is where in RAM will we find location a, b, and c?  Address allocations are made at RUN-TIME and are based on available locations.  At this point we don?t know where a, b, and c  are stored.  The table below is an illustration of where the above variables may be stored in RAM.

                                                                

For more detailed information on RAM allocation (references I used), here are a few sites to look at:


http://en.wikipedia.org/wiki/Random_access_memory


http://en.wikipedia.org/wiki/Datum

http://www.howstuffworks.com/ram1.htm

http://www.ece.utexas.edu/~valvano/embed/chap3/chap3.htm

http://www.allsands.com/Computers/whatisramrand_wde_gn.htm

http://www.howstuffworks.com/ram1.htm

Practice multiple choice and short answer questions:

1.     How many bytes/bits of storage would a data type float require?

a)                2 contiguous bytes

b)               4 contiguous bytes

c)                16 bits

d)               32 bits

e)                both a and c

f)                  both b and d

 

2.  How many contiguous bytes/bits of storage would a data type double require?

 

a)                64 bits

b)               16 bytes

c)                32 bits

d)               8 bytes

e)                a and d

f)                  none of the above

 

3.  How many contiguous bytes/bits of storage would a data type long double require?

 

a)                32 bytes

b)               32 bits

c)                128 bytes

d)               128 bits

e)                a and d

f)                  none of the above

 

4. Which of the following statements is true about RAM?
 
a) to hold the program code and data during execution

b) its accesses to different memory locations are almost always completed at about the same speed.

c) it is a random access memory

d) A and C

e) All of the above
 

 

 

 Answers:

 

1.                f.

2.                e.

3.                d.

4.          e.