Reduced Memory usage by another 50%

This commit is contained in:
Jeremiah Orians 2018-07-26 19:51:44 -04:00
parent 7833cd5660
commit eb8b3e4eb4
No known key found for this signature in database
GPG Key ID: 7457821534D2ACCD
7 changed files with 35 additions and 28 deletions

View File

@ -34,6 +34,7 @@ Brought back common recursion
Reorged logic tree to reduce complexity Reorged logic tree to reduce complexity
Simplified expression Simplified expression
Changed EOF detection logic to deal with unsigned bits Changed EOF detection logic to deal with unsigned bits
Reduced Memory usage down from 50MB to 2MB
** Fixed ** Fixed
Correct bug in how \" is treated Correct bug in how \" is treated

1
cc.c
View File

@ -104,6 +104,7 @@ int main(int argc, char** argv)
global_token = reverse_list(global_token); global_token = reverse_list(global_token);
initialize_types(); initialize_types();
reset_hold_string();
struct token_list* output_list = program(NULL); struct token_list* output_list = program(NULL);
/* Output the program we have compiled */ /* Output the program we have compiled */

2
cc.h
View File

@ -31,6 +31,7 @@
void file_print(char* s, FILE* f); void file_print(char* s, FILE* f);
int match(char* a, char* b); int match(char* a, char* b);
char* copy_string(char* target, char* source); char* copy_string(char* target, char* source);
void reset_hold_string();
struct type struct type
{ {
@ -79,3 +80,4 @@ struct token_list* globals_list;
/* Make our string collection more efficient */ /* Make our string collection more efficient */
char* hold_string; char* hold_string;
int string_index;

View File

@ -32,7 +32,6 @@ int clearWhiteSpace(int c)
return c; return c;
} }
int string_index;
int consume_byte(int c) int consume_byte(int c)
{ {
hold_string[string_index] = c; hold_string[string_index] = c;

View File

@ -127,34 +127,36 @@ int escape_lookup(char* c)
char* collect_regular_string(char* string) char* collect_regular_string(char* string)
{ {
int j = 0; int j = 0;
int i = 0; string_index = 0;
char* message = calloc(MAX_STRING, sizeof(char));
/* 34 == " */ /* 34 == " */
message[0] = 34; hold_string[0] = 34;
while(string[j] != 0) while(string[j] != 0)
{ {
if((string[j] == '\\') & (string[j + 1] == 'x')) if((string[j] == '\\') & (string[j + 1] == 'x'))
{ {
message[i] = escape_lookup(string + j); hold_string[string_index] = escape_lookup(string + j);
j = j + 4; j = j + 4;
} }
else if(string[j] == '\\') else if(string[j] == '\\')
{ {
message[i] = escape_lookup(string + j); hold_string[string_index] = escape_lookup(string + j);
j = j + 2; j = j + 2;
} }
else else
{ {
message[i] = string[j]; hold_string[string_index] = string[j];
j = j + 1; j = j + 1;
} }
i = i + 1; string_index = string_index + 1;
} }
message[i] = 34; char* message = calloc(string_index + 3, sizeof(char));
message[i + 1] = LF; copy_string(message, hold_string);
reset_hold_string();
message[string_index] = 34;
message[string_index + 1] = LF;
return message; return message;
} }
@ -162,45 +164,47 @@ char* collect_regular_string(char* string)
char* collect_weird_string(char* string) char* collect_weird_string(char* string)
{ {
int j = 1; int j = 1;
int k = 1; string_index = 1;
int temp; int temp;
char* table = "0123456789ABCDEF"; char* table = "0123456789ABCDEF";
char* hold = calloc(MAX_STRING, sizeof(char));
/* 39 == ' */ /* 39 == ' */
hold[0] = 39; hold_string[0] = 39;
while(string[j] != 0) while(string[j] != 0)
{ {
hold[k] = ' '; hold_string[string_index] = ' ';
if((string[j] == '\\') & (string[j + 1] == 'x')) if((string[j] == '\\') & (string[j + 1] == 'x'))
{ {
hold[k + 1] = upcase(string[j + 2]); hold_string[string_index + 1] = upcase(string[j + 2]);
hold[k + 2] = upcase(string[j + 3]); hold_string[string_index + 2] = upcase(string[j + 3]);
j = j + 4; j = j + 4;
} }
else if(string[j] == '\\') else if(string[j] == '\\')
{ {
temp = escape_lookup(string + j); temp = escape_lookup(string + j);
hold[k + 1] = table[(temp >> 4)]; hold_string[string_index + 1] = table[(temp >> 4)];
hold[k + 2] = table[(temp & 15)]; hold_string[string_index + 2] = table[(temp & 15)];
j = j + 2; j = j + 2;
} }
else else
{ {
hold[k + 1] = table[(string[j] >> 4)]; hold_string[string_index + 1] = table[(string[j] >> 4)];
hold[k + 2] = table[(string[j] & 15)]; hold_string[string_index + 2] = table[(string[j] & 15)];
j = j + 1; j = j + 1;
} }
k = k + 3; string_index = string_index + 3;
} }
hold[k] = ' '; char* hold = calloc(string_index + 6, sizeof(char));
hold[k + 1] = '0'; copy_string(hold, hold_string);
hold[k + 2] = '0'; reset_hold_string();
hold[k + 3] = 39; hold[string_index] = ' ';
hold[k + 4] = LF; hold[string_index + 1] = '0';
hold[string_index + 2] = '0';
hold[string_index + 3] = 39;
hold[string_index + 4] = LF;
return hold; return hold;
} }

View File

@ -9,7 +9,7 @@ b45fae655b7f848b28ebdb8eb2e30ae789fbcf7920bc315395d53986bb1adae4 test/results/t
d511db73158a9544a5b5f828a79751e3de8a04b81c143fd0c146fc22c938aa9f test/results/test08-binary d511db73158a9544a5b5f828a79751e3de8a04b81c143fd0c146fc22c938aa9f test/results/test08-binary
6831ba0c4e01cea5fb524d811e75542875512fb417baa03d2515278d5b0ee6a5 test/results/test09-binary 6831ba0c4e01cea5fb524d811e75542875512fb417baa03d2515278d5b0ee6a5 test/results/test09-binary
ef179cd359ba1d61d45089e314cd4ac2069c8dc4dd7494d7c766344ea3c8cf88 test/results/test10-binary ef179cd359ba1d61d45089e314cd4ac2069c8dc4dd7494d7c766344ea3c8cf88 test/results/test10-binary
c512c1c2bbe3e6fa5e727f41be286f95a0906d8d9c05165f70c0046918150c2b test/results/test100-binary c526b47458dd06a47fee8d83533d71f48c51867b1c358e43f69da970f7d06338 test/results/test100-binary
5aaf399fe706d4a8c85c121c75ada29a65c293b57c98e8999961a2ef0bab0d62 test/results/test11-binary 5aaf399fe706d4a8c85c121c75ada29a65c293b57c98e8999961a2ef0bab0d62 test/results/test11-binary
4f8111e73e07255ae203963438c82ea8bcff7474e1594b52b426c58a03cb30eb test/results/test12-binary 4f8111e73e07255ae203963438c82ea8bcff7474e1594b52b426c58a03cb30eb test/results/test12-binary
dd74dabfdce8657ff440c1eef531cbf67a64854f2020d4d6bcb65c9cc2d199cb test/results/test13-binary dd74dabfdce8657ff440c1eef531cbf67a64854f2020d4d6bcb65c9cc2d199cb test/results/test13-binary

View File

@ -1 +1 @@
9fb571e4b35e0a169a2a4730a714f17b1695d93775c26763337b804607fe5193 test/test100/proof 5f65ea0157c4526f8d6f5887a045c6fcbb809787feb45ee3317699de3e480012 test/test100/proof