From 23d3a02226973f80188e84fa5dcedb14413c5b7f Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sun, 24 Jun 2018 09:16:17 -0700 Subject: 4266 - space for alloc-id in heap allocations This has taken me almost 6 weeks :( --- 037abandon.cc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to '037abandon.cc') diff --git a/037abandon.cc b/037abandon.cc index 74256687..ca7c242c 100644 --- a/037abandon.cc +++ b/037abandon.cc @@ -2,15 +2,15 @@ :(scenario new_reclaim) def main [ - 1:&:num <- new number:type - 2:num <- deaddress 1:&:num # because 1 will get reset during abandon below - abandon 1:&:num - 3:&:num <- new number:type # must be same size as abandoned memory to reuse - 4:num <- deaddress 3:&:num - 5:bool <- equal 2:num, 4:num + 10:&:num <- new number:type + 20:num <- deaddress 10:&:num + abandon 10:&:num + 30:&:num <- new number:type # must be same size as abandoned memory to reuse + 40:num <- deaddress 30:&:num + 50:bool <- equal 20:num, 40:num ] # both allocations should have returned the same address -+mem: storing 1 in location 5 ++mem: storing 1 in location 50 //: When abandoning addresses we'll save them to a 'free list', segregated by size. @@ -39,7 +39,7 @@ case ABANDON: { for (int i = 0; i < SIZE(current_instruction().ingredients); ++i) { reagent/*copy*/ ingredient = current_instruction().ingredients.at(i); canonize(ingredient); - abandon(get_or_insert(Memory, ingredient.value), payload_size(ingredient)); + abandon(get_or_insert(Memory, ingredient.value+/*skip alloc id*/1), payload_size(ingredient)); } break; } @@ -58,7 +58,7 @@ void abandon(int address, int payload_size) { int payload_size(reagent/*copy*/ x) { x.properties.push_back(pair("lookup", NULL)); lookup_memory_core(x, /*check_for_null*/false); - return size_of(x); + return size_of(x)+/*alloc id*/1; } :(after "Allocate Special-cases") @@ -91,12 +91,12 @@ def main [ :(scenario new_reclaim_array) def main [ - 1:&:@:num <- new number:type, 2 - 2:num <- deaddress 1:&:@:num - abandon 1:&:@:num - 3:&:@:num <- new number:type, 2 # same size - 4:num <- deaddress 3:&:@:num - 5:bool <- equal 2:num, 4:num + 10:&:@:num <- new number:type, 2 + 20:num <- deaddress 10:&:@:num + abandon 10:&:@:num + 30:&:@:num <- new number:type, 2 # same size + 40:num <- deaddress 30:&:@:num + 50:bool <- equal 20:num, 40:num ] # both calls to new returned identical addresses -+mem: storing 1 in location 5 ++mem: storing 1 in location 50 -- cgit 1.4.1-2-gfad0 search'/>
blob: 50aa0237fa092c0c27961efb39393659c618ccea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23