<?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-3%3Atwon069</id>
	<title>SE250:lab-3:twon069 - 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-3%3Atwon069"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-3:twon069&amp;action=history"/>
	<updated>2026-06-04T20:11:56Z</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-3:twon069&amp;diff=5907&amp;oldid=prev</id>
		<title>Mark: 9 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-3:twon069&amp;diff=5907&amp;oldid=prev"/>
		<updated>2008-11-03T05:19:31Z</updated>

		<summary type="html">&lt;p&gt;9 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Task 1==&lt;br /&gt;
Codes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    ArrayList alist;&lt;br /&gt;
    arraylist_init(&amp;amp;alist);&lt;br /&gt;
    long i;&lt;br /&gt;
    int t, elt, maxCap;&lt;br /&gt;
    maxCap = 1200000000;&lt;br /&gt;
    elt = 50;&lt;br /&gt;
&lt;br /&gt;
    t = clock();&lt;br /&gt;
&lt;br /&gt;
    for (i = 0; i &amp;lt; 1000000; i++){&lt;br /&gt;
	arraylist_push(&amp;amp;alist, elt);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    t = (clock() - t);&lt;br /&gt;
    printf(&amp;quot;n = %d\n&amp;quot;, i);&lt;br /&gt;
    printf(&amp;quot;clock/CLOCKS_PER_SEC = %d /%d\n&amp;quot;, t, CLOCKS_PER_SEC);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 31 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 421 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 4687 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000000&lt;br /&gt;
assertion &amp;quot;alist-&amp;gt;arr != (element_t*)0&amp;quot; failed: file &amp;quot;arraylist.c&amp;quot;, line 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The results shows a linear increase when the number of times the array has to add something is increased in a linear fashion as well.&lt;br /&gt;
*The last result shows the memory being exhausted due to the array being too large&lt;br /&gt;
&lt;br /&gt;
==Task 2==&lt;br /&gt;
===GF of 1.5===&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 500 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 5265 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000000&lt;br /&gt;
assertion &amp;quot;alist-&amp;gt;arr != (element_t*)0&amp;quot; failed: file &amp;quot;arraylist.c&amp;quot;, line 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GF of 3===&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 484 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
assertion &amp;quot;alist-&amp;gt;arr != (element_t*)0&amp;quot; failed: file &amp;quot;arraylist.c&amp;quot;, line 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GF of 5===&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 375 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3875 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000000&lt;br /&gt;
assertion &amp;quot;alist-&amp;gt;arr != (element_t*)0&amp;quot; failed: file &amp;quot;arraylist.c&amp;quot;, line 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GF of 15===&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 328 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3797 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000000&lt;br /&gt;
error:&lt;br /&gt;
17855 [main] main 3656 _cygtls::handle_exceptions: Error while dumping state&lt;br /&gt;
probably corrupted stack)&lt;br /&gt;
Segmentation fault (core dumped)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GF of 20===&lt;br /&gt;
Results were:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 31 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 344 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 100000000&lt;br /&gt;
assertion &amp;quot;alist-&amp;gt;arr != (element_t*)0&amp;quot; failed: file &amp;quot;arraylist.c&amp;quot;, line 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The results shows no significant changes to the time it takes, however the larger the growth factor, the less element it seen to be able to hold.&lt;br /&gt;
*The above is due to growth factor being too large, and multiplying the original size sometime makes a large excess of unused array, which then takes up too much of the memory and exhausting it.&lt;br /&gt;
*Though is it not clear, but it should take less time to place elements into the array when the growth factor increases due to the time the memory needs to be realloced is lowered.&lt;br /&gt;
&lt;br /&gt;
==Task 3==&lt;br /&gt;
Results for MIN_ALLOC of 8:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 452 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 922 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1296 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2079 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2391 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results for MIN_ALLOC of 32:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 485 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 938 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1297 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2078 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2375 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results for MIN_ALLOC of 1024:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 469 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 969 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1359 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2031 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2453 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Results for MIN_ALLOC of 1048576:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 484 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 968 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1360 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2031 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2468 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Theres not really a change in time when the MIN_ALLOC is increased in a small scale compare to n, this could be due to small amount of memory does not take much time to be realloc&amp;#039;d, therefore the same amount of large alloc is only counted for in time.&lt;br /&gt;
&lt;br /&gt;
Results for MIN_ALLOC of 10000000:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 376 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 828 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1297 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1751 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2468 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*A decrease in time can be shown here for n = 10000000, 20000000, 40000000, this is due to no realloc is done to 10000000, and 4000000 values, and reallocing 10000000 to 20000000 took some times.&lt;br /&gt;
*However 50000000 remains the same due to having to realloc a larger chunk of memory, so the time is the same as the rest of the experiments.&lt;br /&gt;
&lt;br /&gt;
Results for MIN_ALLOC of 50000000:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 375 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 782 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1140 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1547 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1921 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*A decrease in time can be shown significantly, the time to realloc is only done 3 times.&lt;br /&gt;
&lt;br /&gt;
==Task 4==&lt;br /&gt;
With ensure_capacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 391 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 750 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1109 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1501 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1937 /1000&lt;br /&gt;
n = 60000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2640 /1000&lt;br /&gt;
n = 70000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2657 /1000&lt;br /&gt;
n = 80000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3031 /1000&lt;br /&gt;
n = 90000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3437 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Without ensure_capacity:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 10000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 469 /1000&lt;br /&gt;
n = 20000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 906 /1000&lt;br /&gt;
n = 30000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1281 /1000&lt;br /&gt;
n = 40000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2062 /1000&lt;br /&gt;
n = 50000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2359 /1000&lt;br /&gt;
n = 60000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 2733 /1000&lt;br /&gt;
n = 70000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3657 /1000&lt;br /&gt;
n = 80000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3953 /1000&lt;br /&gt;
n = 90000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 4296 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*A significant decrease in time, showing a great deal of time is going through reallocating larger chunks of memory.&lt;br /&gt;
&lt;br /&gt;
==Task 5==&lt;br /&gt;
GF of *2.0:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
n = 2000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 94 /1000&lt;br /&gt;
n = 3000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 125 /1000&lt;br /&gt;
n = 4000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 172 /1000&lt;br /&gt;
n = 5000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 234 /1000&lt;br /&gt;
n = 6000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 281 /1000&lt;br /&gt;
n = 7000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 344 /1000&lt;br /&gt;
n = 8000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 360 /1000&lt;br /&gt;
n = 9000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 437 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GF of +1000:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 203 /1000&lt;br /&gt;
n = 2000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 734 /1000&lt;br /&gt;
n = 3000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 1891 /1000&lt;br /&gt;
n = 4000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 3422 /1000&lt;br /&gt;
n = 5000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 5296 /1000&lt;br /&gt;
n = 6000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 7516 /1000&lt;br /&gt;
n = 7000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 10126 /1000&lt;br /&gt;
n = 8000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 13266 /1000&lt;br /&gt;
n = 9000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 17655 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*The difference here is massive, taking up to 17seconds to fill in 90million elements, whereas multiplying by 2 simply takes up less than a second!&lt;br /&gt;
&lt;br /&gt;
==Task 6==&lt;br /&gt;
With arraylist_push:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
n = 1000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 47 /1000&lt;br /&gt;
n = 2000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 94 /1000&lt;br /&gt;
n = 3000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 125 /1000&lt;br /&gt;
n = 4000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 172 /1000&lt;br /&gt;
n = 5000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 234 /1000&lt;br /&gt;
n = 6000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 266 /1000&lt;br /&gt;
n = 7000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 344 /1000&lt;br /&gt;
n = 8000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 328 /1000&lt;br /&gt;
n = 9000000&lt;br /&gt;
clock/CLOCKS_PER_SEC = 453 /1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With arraylist_put:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
..... 12 seconds after... nothing appeared...&lt;br /&gt;
..... 30 seconds...&lt;br /&gt;
..... 50 seconds...&lt;br /&gt;
..... 60.....&lt;br /&gt;
...................&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Obviously the time taken to shift all element by 1 space is just insane... @@&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>