<?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%3Aasin185</id>
	<title>SE250:lab-2:asin185 - 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%3Aasin185"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:asin185&amp;action=history"/>
	<updated>2026-04-29T10:25:04Z</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:asin185&amp;diff=4754&amp;oldid=prev</id>
		<title>Mark: 46 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-2:asin185&amp;diff=4754&amp;oldid=prev"/>
		<updated>2008-11-03T05:18:53Z</updated>

		<summary type="html">&lt;p&gt;46 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lab 2 =&lt;br /&gt;
== Intro ==&lt;br /&gt;
For this lab we must generate results from both our local computers and the the Linux server. Then compare these results retrieved. This is done so that the different memory allocation can be shown for different &amp;#039;&amp;#039;C&amp;#039;&amp;#039; compilers.&lt;br /&gt;
&lt;br /&gt;
== Task 1 ==&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt; &lt;br /&gt;
 int main () {&lt;br /&gt;
 &lt;br /&gt;
     int *ip;&lt;br /&gt;
     double *ip2;&lt;br /&gt;
     float *ip3;&lt;br /&gt;
     long *ip4;&lt;br /&gt;
     short *ip5;&lt;br /&gt;
 &lt;br /&gt;
     printf(&amp;quot;int p = %d\ndouble p = %ld\nfloat p = %ld\nlong p = %ld\nshort p = %ld\n&amp;quot;, sizeof(ip2) , sizeof(ip), sizeof(ip3),  sizeof(ip4), sizeof(ip5));&lt;br /&gt;
    &lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Int p    = 4&lt;br /&gt;
 Double p = 4&lt;br /&gt;
 Float p  = 4&lt;br /&gt;
 Long p   = 4&lt;br /&gt;
 Short p  = 4&lt;br /&gt;
&lt;br /&gt;
== Task 2 ==&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main (){&lt;br /&gt;
    &lt;br /&gt;
    int x;&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 - (long)&amp;amp;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;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccc0, diff = 4&lt;br /&gt;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccc0, diff = 1&lt;br /&gt;
&lt;br /&gt;
== Task 3 ==&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int main (){&lt;br /&gt;
    &lt;br /&gt;
    int x = 0;&lt;br /&gt;
    char arr[ 4 ];&lt;br /&gt;
    arr[ 4 ] = 10;&lt;br /&gt;
    int y = 0;&lt;br /&gt;
    printf(&amp;quot;size of array = %d\n&amp;quot;, sizeof(arr));&lt;br /&gt;
    printf(&amp;quot;&amp;amp;arr = %p\n&amp;quot;, &amp;amp;arr );&lt;br /&gt;
    printf(&amp;quot;value &amp;amp;arr = %d\n&amp;quot;, arr );&lt;br /&gt;
    printf(&amp;quot;value &amp;amp;arr + 4  = %d\n&amp;quot;, arr+4 );&lt;br /&gt;
    printf(&amp;quot;value &amp;amp;arr[4] = %d\n&amp;quot;, &amp;amp;arr[4] );&lt;br /&gt;
    printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    printf(&amp;quot;value of x = %d\nvalue of y = %d\n&amp;quot;, x, y);&lt;br /&gt;
    printf(&amp;quot;\n&amp;quot;);&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;
 size of array = 4&lt;br /&gt;
 &amp;amp;arr = 0x22ccc0&lt;br /&gt;
 value &amp;amp;arr = 2280640&lt;br /&gt;
 value &amp;amp;arr + 4  = 2280644&lt;br /&gt;
 value &amp;amp;arr[4] = 2280644&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			0&lt;br /&gt;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccbc, diff = 2			1&lt;br /&gt;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccbc, diff = 2			2&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			3&lt;br /&gt;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccbc, diff = 2			4&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			5&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			6&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			7&lt;br /&gt;
 &amp;amp;x = 0x22ccc4, &amp;amp;y = 0x22ccb4, diff = 4			8&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			9&lt;br /&gt;
 &amp;amp;x = 0x22ccbc, &amp;amp;y = 0x22cc9c, diff = 8			10&lt;br /&gt;
 &lt;br /&gt;
 value of x = 10&lt;br /&gt;
 value of y = 0&lt;br /&gt;
&lt;br /&gt;
== Task 4 ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 ===&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int x;&lt;br /&gt;
 int y;&lt;br /&gt;
 int main (){&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;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 16&lt;br /&gt;
&lt;br /&gt;
=== 4.2 ===&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 int x;&lt;br /&gt;
 int y;&lt;br /&gt;
 int main (){&lt;br /&gt;
     &lt;br /&gt;
    char arr[ 4 ];&lt;br /&gt;
     arr[ 4 ] = 10;&lt;br /&gt;
     printf(&amp;quot;size of array = %d\n&amp;quot;, sizeof(arr));&lt;br /&gt;
     printf(&amp;quot;&amp;amp;arr = %p\n&amp;quot;, &amp;amp;arr );&lt;br /&gt;
     printf(&amp;quot;value &amp;amp;arr = %d\n&amp;quot;, arr );&lt;br /&gt;
     printf(&amp;quot;value &amp;amp;arr + 4  = %d\n&amp;quot;, arr+4 );&lt;br /&gt;
     printf(&amp;quot;value &amp;amp;arr[4] = %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;
 size of array = 0&lt;br /&gt;
 &amp;amp;arr = 0x22ccb0&lt;br /&gt;
 value &amp;amp;arr = 2280624&lt;br /&gt;
 value &amp;amp;arr + 4  = 2280628&lt;br /&gt;
 value &amp;amp;arr[4] = 2280628&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			0&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			1&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			2&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			3&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			4&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			5&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			6	&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			7&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			8&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			9	&lt;br /&gt;
 &amp;amp;x = 0x403030, &amp;amp;y = 0x403020, diff = 4			10        &lt;br /&gt;
 &lt;br /&gt;
 value of x = 0&lt;br /&gt;
 value of y = 0&lt;br /&gt;
&lt;br /&gt;
== Task 5 ==&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int x;&lt;br /&gt;
 int y;&lt;br /&gt;
 int main (){&lt;br /&gt;
 &lt;br /&gt;
    &lt;br /&gt;
     int *p1, *p2;&lt;br /&gt;
     { int q; p1 = &amp;amp;q; }&lt;br /&gt;
     { int r; p2 = &amp;amp;r; }&lt;br /&gt;
     &lt;br /&gt;
     printf(&amp;quot;value of p1 = %d\nvalue of p2 = %d&amp;quot;, p1, p2);&lt;br /&gt;
 &lt;br /&gt;
     &lt;br /&gt;
     return 0;&lt;br /&gt;
&lt;br /&gt;
 value of p1 = 2280636&lt;br /&gt;
 value of p2 = 2280632&lt;br /&gt;
&lt;br /&gt;
== Task 6 ==&lt;br /&gt;
&lt;br /&gt;
&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;
  	char s[8] = &amp;quot;0123456&amp;quot;;&lt;br /&gt;
  	return s;&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;
   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;
   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 (void) {&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;
 	strcpy( sp, ”XXXXXXX” );&lt;br /&gt;
 	printf( ”sp X’d = %p(%s)\n”, 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;
 	strcpy( sp, ”XXXXXXX” );&lt;br /&gt;
 	printf( ”sp X’d = %p(%s)\n”, 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;
 	strcpy( sp, ”XXXXXXX” );&lt;br /&gt;
 	printf( ”sp X’d = %p(%s)\n”, 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;
 	strcpy( sp, ”XXXXXXX” );&lt;br /&gt;
 	printf( ”sp X’d = %p(%s)\n”, sp, sp );&lt;br /&gt;
 	&lt;br /&gt;
 	return 0;&lt;br /&gt;
  }&lt;br /&gt;
=== 6.1 ===&lt;br /&gt;
&lt;br /&gt;
 sp = 0x22cca0(456)&lt;br /&gt;
 sp = 0x22cca0(efg)&lt;br /&gt;
 sp = 0x402000(tuvwxyz)&lt;br /&gt;
 sp = 0x670178(hijklmn)&lt;br /&gt;
&lt;br /&gt;
=== 6.2 ===&lt;br /&gt;
&lt;br /&gt;
 sp = 0x22cca0(456)&lt;br /&gt;
 sp X&amp;#039;d = 0x22cca0(&amp;#039;1@)&lt;br /&gt;
 sp = 0x22cca0(efg)&lt;br /&gt;
 sp X&amp;#039;d = 0x22cca0(&amp;#039;1@)&lt;br /&gt;
 sp = 0x402000(tuvwxyz)&lt;br /&gt;
 sp X&amp;#039;d = 0x402000(XXXXXXX)&lt;br /&gt;
 sp = 0x670178(hijklmn)&lt;br /&gt;
 sp X&amp;#039;d = 0x670178(XXXXXXX)&lt;br /&gt;
&lt;br /&gt;
== Task 7 ==&lt;br /&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;
             &lt;br /&gt;
      int main(void){&lt;br /&gt;
      printf( ”&amp;amp;my struct = %p\n”, my struct );&lt;br /&gt;
      printf( ”offsets:\n”&lt;br /&gt;
 	     ”my char: %ld\n”&lt;br /&gt;
 	     ”my short: %ld\n”&lt;br /&gt;
 	     ”my int: %ld\n”&lt;br /&gt;
 	     ”my long: %ld\n”&lt;br /&gt;
 	     ”my float: %ld\n”&lt;br /&gt;
 	     ”my double: %ld\n”,&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;
 &amp;amp;my_struct = 0x404030&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;
== Task 8 ==&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 (void) {&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;
 &amp;amp;my_union = 0x404050&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;
== Task 9 ==&lt;br /&gt;
&lt;br /&gt;
 int main(void) {&lt;br /&gt;
 &lt;br /&gt;
 	char *sp1, *sp2, *sp3;&lt;br /&gt;
 	sp1 = malloc(10);&lt;br /&gt;
 	sp2 = malloc(10);&lt;br /&gt;
 	printf(&amp;quot;sp1 = %p sp2 = %p\n&amp;quot;, sp1, sp2); &lt;br /&gt;
 &lt;br /&gt;
 	free(sp1);&lt;br /&gt;
 	sp3 = malloc(10);&lt;br /&gt;
 	printf(&amp;quot;sp1 = %p sp2 = %p sp3 = %p\n&amp;quot;, sp1, sp2, sp3);&lt;br /&gt;
 	&lt;br /&gt;
 	strcpy( sp1, &amp;quot;abcdefghi&amp;quot; );&lt;br /&gt;
 	printf(&amp;quot;sp1 = %s\n&amp;quot;, sp1);&lt;br /&gt;
 	printf(&amp;quot;sp3 = %s\n&amp;quot;, sp3);&lt;br /&gt;
 	&lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 sp1 = 0x670188 sp2 = 0x670198&lt;br /&gt;
 sp1 = 0x670188 sp2 = 0x670198 sp3 = 0x670188&lt;br /&gt;
 sp1 = abcdefghi&lt;br /&gt;
 sp3 = abcdefghi&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;
 int main(void){ &lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;main = %p\n&amp;quot;, main); &lt;br /&gt;
 &lt;br /&gt;
   return 0;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 local_str = 0x22cc40&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>