Data Structures and Algorithms with Object-Oriented Design Patterns in C#
next up previous contents index

Arrays

 

Probably the most common way to aggregate data is to use an array. In C# an array is an object that contains a collection of objects, all of the same type. For example,

int[] a = new int[5];
allocates an array of five integers and assigns it to the variable a.

The elements of an array are accessed using integer-valued indices. In C# the first element of an array always has index zero. Thus, the five elements of array a are a[0], a[1], ..., a[4]. All array objects in C# have an int property called Length, the value of which is equal to the number of array elements. In this case, a.Length has the value 5.

C# checks at run-time that the index used in every array access is valid. Valid indices fall between zero and tex2html_wrap_inline60155. If an invalid index expression is used, an IndexOutOfRangeException exception is thrown.

It is important to understand that in C#, the variable a refers to an array object of type int[]. In particular, the sequence of statements

int[] b;
b = a;
causes the variable b to refer to the same array object as variable a.

Once allocated, the size of a C# array object is fixed. That is, it is not possible to increase or decrease the size of a given array. Of course, it is always possible to allocate a new array of the desired size, but it is up to the programmer to copy the values from the old array to the new one.

How are C# arrays represented in the memory of the computer? The specification of the C# language leaves this up to the system implementers[22]. However, Figure gif illustrates a typical implementation scenario.

   figure2566
Figure: Memory representation of C# arrays.

The elements of an array typically occupy consecutive memory locations. That way, given i it is possible to find the position of tex2html_wrap_inline60159 in constant time. In addition to the array elements, the array object has a Length property, the value of which is represented by an int field called length.

On the basis of Figure gif, we can now estimate the total storage required to represent an array. Let S(n) be the total storage (memory) needed to represent an array of n ints. S(n) is given by

eqnarray2670

where the function tex2html_wrap_inline60169 is the number of bytes used for the memory representation of an instance of an object of type X.

In C#, the sizes of the simple data types are fixed constants. Hence, tex2html_wrap_inline60171. In practice, an array object may contain additional fields. For example, it is reasonable to expect that there is a field which records the position in memory of the first array element. In any event, the overhead associated with a fixed number of fields is O(1). Therefore, S(n)=O(n).




next up previous contents index

Bruno Copyright © 2001 by Bruno R. Preiss, P.Eng. All rights reserved.