Here is a basic Markdown template you can use for this week (and most of the quarter).
whereA[i]is equivalent to*(A+i)
(A + i) really means
A + (i * sizeof(itemtype)) (because pointer
arithmetic). Does knowing this help you understand the MIPS code
required to access an array element, or does understanding the MIPS
code help you to understand the C pointer arithmetic version? (Or
neither!?)
Reflecting on the recursive and non-recursive assembly language implementations you wrote for the Triangular Number function, what does that tell you about the overhead involved in function calls?
Optional: If you also implemented the optional tail-recursive algorithm, why did the tail-recursive version require fewer Stack push and pop operations than the non-tail-recursive version?
Use what you learned implementing the two Triangular Number functions to explain why the code on the left is more efficient than the code on the right.
int i;
int dec = 0, powOf2 = 1;
for ( i = end; i >= begin; i-- )
{
if ( input[i] == '1' )
dec += powOf2;
powOf2 *= 2;
}
|
int i;
int dec = 0, exp = 0;
for ( i = end; i >= begin; i-- )
{
if ( input[i] == '1' )
dec += pow(2, exp);
exp++;
}
|
Optional: If you want, describe why the code below is even more efficient than the code on the left above.
int * ptr;
int * beginAddr = &input[begin];
int dec = 0, powOf2 = 1;
for ( ptr = &input[end]; ptr >= beginAddr; ptr-- )
{
if ( *ptr == '1' )
dec += powOf2;
powOf2 = powOf2 << 1;
}