<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-2%3Asbha077</id>
	<title>SE250:lab-2:sbha077 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-2%3Asbha077"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:sbha077&amp;action=history"/>
	<updated>2026-04-29T10:33:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-2:sbha077&amp;diff=5167&amp;oldid=prev</id>
		<title>Mark: 43 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:sbha077&amp;diff=5167&amp;oldid=prev"/>
		<updated>2008-11-03T05:19:08Z</updated>

		<summary type="html">&lt;p&gt;43 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Lab 2 Report ==&lt;br /&gt;
&lt;br /&gt;
=== What was done ===&lt;br /&gt;
&lt;br /&gt;
We were required to carry out some calculations and tasks to find the sizes and address locations of various pointers and variables that we initialised.&lt;br /&gt;
&lt;br /&gt;
Then we had to observe the differences between compiling under different architectures (win-intel x86 and linux-ppc x64).&lt;br /&gt;
&lt;br /&gt;
=== Task 1 ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 int *ip1;&lt;br /&gt;
 long *ip2;&lt;br /&gt;
 double *ip3;&lt;br /&gt;
 float *ip4;&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;%ld %ld %ld %ld\n&amp;quot;,sizeof(ip1),sizeof(ip2),sizeof(ip3),sizeof(ip4));&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; 4 4 4 4&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; 4 4 4 4 &lt;br /&gt;
&lt;br /&gt;
OBSEVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; The values remain constant. Quite expected because they are pointers and the values don&amp;#039;t change no matter what data type they are.&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; Same values as the Intel machine.&lt;br /&gt;
&lt;br /&gt;
=== Task 2a ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 int x, y;&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x = %p; &amp;amp;y = %p; diff = %ld\n&amp;quot;,&amp;amp;x, &amp;amp;y, (long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; &amp;amp;x = 0012FF70; &amp;amp;y = 0012FF74; diff = -1&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0xffb499ec; &amp;amp;y = 0xffb499e8; diff = 1&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; The addresses are stored in &amp;quot;earlier&amp;quot; parts of the memory. The difference, as quite expected, negative&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; The addresses are stored in &amp;quot;later&amp;quot; parts of the memory. The difference is strangely positive.&lt;br /&gt;
&lt;br /&gt;
=== Task 2b ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 int x, y;&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x = %p; &amp;amp;y = %p; diff = %ld\n&amp;quot;,&amp;amp;x, &amp;amp;y, (long)&amp;amp;x - (long)&amp;amp;y);&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; &amp;amp;x = 0012FF70; &amp;amp;y = 0012FF74; diff = -4&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0xff9629ec; &amp;amp;y = 0xff9629e8; diff = 4&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; Same observations as before&lt;br /&gt;
&lt;br /&gt;
=== Task 3a ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 int x;&lt;br /&gt;
 char arr[4];&lt;br /&gt;
 int y;&lt;br /&gt;
 printf(&amp;quot;&amp;amp;x = %p; &amp;amp;y = %p; diff = %ld\n&amp;quot;,&amp;amp;x, &amp;amp;y, (long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; &amp;amp;x = 0012FF70; &amp;amp;y = 0012FF74; diff = -1&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0xff90e9ec; &amp;amp;y = 0xff90e9e4; diff = 2&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; The difference between the x and y values on memory is negative which does not fit to reason again.&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; The difference is positive and fairly larger (more than 1 anyway) and seems more plausible.&lt;br /&gt;
&lt;br /&gt;
=== Task 3b ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 int x;&lt;br /&gt;
 char arr[ 4 ];&lt;br /&gt;
 int y;&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;&amp;amp;x = %p; &amp;amp;y = %p; diff = %ld\n&amp;quot;,&amp;amp;x, &amp;amp;y, (long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 printf(&amp;quot;address of &amp;amp;arr = %p\n&amp;quot;,&amp;amp;arr);&lt;br /&gt;
 printf(&amp;quot;value of %d\n&amp;quot;, &amp;amp;arr);&lt;br /&gt;
 printf(&amp;quot;size of the arr+4 = %ld\n&amp;quot;, arr+4);&lt;br /&gt;
 printf(&amp;quot;value of the %d\n&amp;quot;, &amp;amp;arr[4]);&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0012FF70; &amp;amp;y = 0012FF74; diff = -1&lt;br /&gt;
 address of &amp;amp;arr = 0012FF6C&lt;br /&gt;
 value of &amp;amp;arr = 1245036&lt;br /&gt;
 size of the arr+4 = 1245040&lt;br /&gt;
 value of the &amp;amp;arr[4] = 1245040&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0xffc369ec; &amp;amp;y = 0xffc369e4; diff = 2&lt;br /&gt;
 address of &amp;amp;arr = 0xffc369e8&lt;br /&gt;
 value of &amp;amp;arr = -3970584&lt;br /&gt;
 size of the arr+4 = -3970580&lt;br /&gt;
 value of the &amp;amp;arr[4] = -3970580&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; This does not make sense! I get -1 as differnce?!?&lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; Even worse! Negative sizes and address values? I&amp;#039;m sure I typed everything correctly so...I&amp;#039;m lost!&lt;br /&gt;
&lt;br /&gt;
=== Task 4a ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int x, y;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;&amp;amp;x = %p; &amp;amp;y = %p; diff = %ld\n&amp;quot;,&amp;amp;x, &amp;amp;y, (long)(&amp;amp;x-&amp;amp;y));&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;  &amp;amp;x = 0040D984; &amp;amp;y = 0040D980; diff = 1&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0x10010a64; &amp;amp;y = 0x10010a68; diff = -1&lt;br /&gt;
&lt;br /&gt;
=== Task 4b ===&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; &amp;amp;x = 0040D984; &amp;amp;y = 0040D980; diff = 4&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0x10010a64; &amp;amp;y = 0x10010a68; diff = -4&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; The positive negative difference issue again! Somebody explain!&lt;br /&gt;
&lt;br /&gt;
=== Task4c ===&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; &amp;amp;x = 0040D984; &amp;amp;y = 0040D980; diff = 1&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; &amp;amp;x = 0x10010a64; &amp;amp;y = 0x10010a68; diff = -1&lt;br /&gt;
&lt;br /&gt;
=== Task 4d ===&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0040D9E4; &amp;amp;y = 0040D9E0; diff = 1&lt;br /&gt;
 address of &amp;amp;arr = 0012FF74&lt;br /&gt;
 value of &amp;amp;arr = 1245044&lt;br /&gt;
 size of the arr+4 = 1245048&lt;br /&gt;
 value of the &amp;amp;arr[4] = 1245048&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0x10010b38; &amp;amp;y = 0x10010b3c; diff = -1 &lt;br /&gt;
 address of &amp;amp;arr = 0xffd789ec&lt;br /&gt;
 value of &amp;amp;arr = -2651668&lt;br /&gt;
 size of the arr+4 = -2651664&lt;br /&gt;
 value of the &amp;amp;arr[4] = -2651664&lt;br /&gt;
&lt;br /&gt;
=== Task 5 ===&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 The value of *p1 = 1245040&lt;br /&gt;
 The value of *p2 = 1245044&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 The value of *p1 = -2762260&lt;br /&gt;
 The value of *p2 = -2762264&lt;br /&gt;
&lt;br /&gt;
=== Task 6a ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 char *local_str() {&lt;br /&gt;
 char s[8] = &amp;quot;0123456&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *local_str2() {&lt;br /&gt;
 char s[8] = &amp;quot;abcdefg&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *static_str() {&lt;br /&gt;
 static char s[8] = &amp;quot;tuvwxyz&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *malloc_str() {&lt;br /&gt;
 char *s = malloc(8);&lt;br /&gt;
 strcpy(s, &amp;quot;hijklmn&amp;quot;);&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 char *sp;&lt;br /&gt;
 &lt;br /&gt;
 sp = local_str();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 sp = local_str2();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 sp = static_str();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 sp = malloc_str();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp = 0012FF60(x ↕)&lt;br /&gt;
 sp = 0012FF60(x ↕)&lt;br /&gt;
 sp = 0040C010(tuvwxyz)&lt;br /&gt;
 sp = 00323148(hijklmn)&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp = 0xffa129b4(�þîÐ�)&lt;br /&gt;
 sp = 0xffa129b4(abcdefg)&lt;br /&gt;
 sp = 0x10010cc4(tuvwxyz)&lt;br /&gt;
 sp = 0x10011008(hijklmn)&lt;br /&gt;
&lt;br /&gt;
=== Task 6b ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 char *local_str() {&lt;br /&gt;
 char s[8] = &amp;quot;0123456&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *local_str2() {&lt;br /&gt;
 char s[8] = &amp;quot;abcdefg&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *static_str() {&lt;br /&gt;
 static char s[8] = &amp;quot;tuvwxyz&amp;quot;;&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 char *malloc_str() {&lt;br /&gt;
 char *s = malloc(8);&lt;br /&gt;
 strcpy(s, &amp;quot;hijklmn&amp;quot;);&lt;br /&gt;
 return s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
  &lt;br /&gt;
 char *sp;&lt;br /&gt;
 &lt;br /&gt;
 sp = local_str();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 strcpy( sp, &amp;quot;XXXXXXX&amp;quot; );&lt;br /&gt;
 printf( &amp;quot;sp X’d = %p(%s)\n&amp;quot;, sp, sp );&lt;br /&gt;
 &lt;br /&gt;
 sp = local_str();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 strcpy( sp, &amp;quot;XXXXXXX&amp;quot; );&lt;br /&gt;
 printf( &amp;quot;sp X’d = %p(%s)\n&amp;quot;, sp, sp );&lt;br /&gt;
 &lt;br /&gt;
 sp = static_str();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 strcpy( sp, &amp;quot;XXXXXXX&amp;quot; );&lt;br /&gt;
 printf( &amp;quot;sp X’d = %p(%s)\n&amp;quot;, sp, sp );&lt;br /&gt;
 &lt;br /&gt;
 sp = malloc_str();&lt;br /&gt;
 local_str2();&lt;br /&gt;
 printf(&amp;quot;sp = %p(%s)\n&amp;quot;,sp,sp);&lt;br /&gt;
 &lt;br /&gt;
 strcpy( sp, &amp;quot;XXXXXXX&amp;quot; );&lt;br /&gt;
 printf( &amp;quot;sp X’d = %p(%s)\n&amp;quot;, sp, sp );&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp = 0012FF60(x ↕)&lt;br /&gt;
 sp XÆd = 0012FF60(x ↕)&lt;br /&gt;
 sp = 0012FF60(x ↕)&lt;br /&gt;
 sp XÆd = 0012FF60(x ↕)&lt;br /&gt;
 sp = 0040C010(tuvwxyz)&lt;br /&gt;
 sp XÆd = 0040C010(XXXXXXX)&lt;br /&gt;
 sp = 00323148(hijklmn)&lt;br /&gt;
 sp XÆd = 00323148(XXXXXXX)&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp = 0xffb359b4(�þîÐ�)&lt;br /&gt;
 sp Xâd = 0xffb359b4(XXXXXXX)&lt;br /&gt;
 sp = 0xffb359b4(abcdefg)&lt;br /&gt;
 sp Xâd = 0xffb359b4(XXXXXXX)&lt;br /&gt;
 sp = 0x10010dc0(tuvwxyz)&lt;br /&gt;
 sp Xâd = 0x10010dc0(XXXXXXX)&lt;br /&gt;
 sp = 0x10011008(hijklmn)&lt;br /&gt;
 sp Xâd = 0x10011008(XXXXXXX)&lt;br /&gt;
&lt;br /&gt;
=== Task 7 ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 struct {&lt;br /&gt;
 char my_char;&lt;br /&gt;
 short my_short;&lt;br /&gt;
 int my_int;&lt;br /&gt;
 long my_long;&lt;br /&gt;
 float my_float;&lt;br /&gt;
 double my_double;&lt;br /&gt;
 } my_struct;&lt;br /&gt;
 &lt;br /&gt;
 int main () {&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;&amp;amp;my struct = %p\n&amp;quot;, &amp;amp;my_struct );&lt;br /&gt;
 printf(&amp;quot;offsets:\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_char: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_short: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_int: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_long: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_float: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_double: %ld\n&amp;quot;,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_char,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_short,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_int,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_long,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_float,&lt;br /&gt;
 (long)&amp;amp;my_struct - (long)&amp;amp;my_struct.my_double);&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;my struct = 0040D9C0&lt;br /&gt;
 offsets:&lt;br /&gt;
 my_char: 0&lt;br /&gt;
 my_short: -2&lt;br /&gt;
 my_int: -4&lt;br /&gt;
 my_long: -8&lt;br /&gt;
 my_float: -12&lt;br /&gt;
 my_double: -16&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;my_struct = 0x10010ac0&lt;br /&gt;
 offsets:&lt;br /&gt;
 my_char: 0&lt;br /&gt;
 my_short: -2&lt;br /&gt;
 my_int: -4&lt;br /&gt;
 my_long: -8&lt;br /&gt;
 my_float: -12&lt;br /&gt;
 my_double: -16&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; Interestingly, the values of the off-sets are the same BUT the memory locations are different which was quite expected.&lt;br /&gt;
&lt;br /&gt;
=== Task 8 ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 union {&lt;br /&gt;
 char my_char;&lt;br /&gt;
 short my_short;&lt;br /&gt;
 int my_int;&lt;br /&gt;
 long my_long;&lt;br /&gt;
 float my_float;&lt;br /&gt;
 double my_double;&lt;br /&gt;
 } my_union;&lt;br /&gt;
 &lt;br /&gt;
 int main () {&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;&amp;amp;my_union = %p\n&amp;quot;, &amp;amp;my_union );&lt;br /&gt;
 printf(&amp;quot;offsets:\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_char: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_short: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_int: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_long: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_float: %ld\n&amp;quot;&lt;br /&gt;
 &amp;quot;my_double: %ld\n&amp;quot;,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_char,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_short,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_int,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_long,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_float,&lt;br /&gt;
 (long)&amp;amp;my_union - (long)&amp;amp;my_union.my_double);&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;my_union = 0040D9C0&lt;br /&gt;
 offsets:&lt;br /&gt;
 my_char: 0&lt;br /&gt;
 my_short: 0&lt;br /&gt;
 my_int: 0&lt;br /&gt;
 my_long: 0&lt;br /&gt;
 my_float: 0&lt;br /&gt;
 my_double: 0&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;my_union = 0x10010ab0&lt;br /&gt;
 offsets:&lt;br /&gt;
 my_char: 0&lt;br /&gt;
 my_short: 0&lt;br /&gt;
 my_int: 0&lt;br /&gt;
 my_long: 0&lt;br /&gt;
 my_float: 0&lt;br /&gt;
 my_double: 0&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; The memory locations as expected are different but all the offset values being ZERO!?!?&lt;br /&gt;
 I might have forgotten stuff from the leture which explains why I don&amp;#039;t understand this phenomenon.&lt;br /&gt;
&lt;br /&gt;
=== Task 9 ===&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp1 = 0012FF74, sp2 = 0012FF70&lt;br /&gt;
 sp2 = 0012FF70, sp3 = 0012FF6C&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 sp1 = 0xffac59ec, sp2 = 0xffac59e8&lt;br /&gt;
 sp2 = 0xffac59e8, sp3 = 0xffac59e4&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; Due to memory allocation, the pointers are stored in similar regions of the memory.&lt;br /&gt;
&lt;br /&gt;
=== Task 10 ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 char *local_str( ) {&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;local_str = %p\n&amp;quot;, local_str );&lt;br /&gt;
 return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
RESULTS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 &amp;gt;&amp;gt; local_str = 00401000&lt;br /&gt;
 &lt;br /&gt;
 PPC x64 &amp;gt;&amp;gt; local_str = 0x1000046c&lt;br /&gt;
&lt;br /&gt;
OBSERVATIONS:&lt;br /&gt;
&lt;br /&gt;
 Intel x86 and PPC x64 &amp;gt;&amp;gt; I&amp;#039;m tired of making these observations now! OK...final one! The functions live in the start / initial part of the memory.&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>