**1. Avoid double calculation**

avoid calculating variables inside a loop when you can do so outside. Example:

Code: Select all

```
set HEADER 0x800
set DAT 0x100
for i = 1 <= 10000
get FSIZE asize # same operation each loop
math FSIZE -= HEADER # "
set SUB i
math SUB *= DAT
math FSIZE -= SUB
next i
```

Code: Select all

```
set HEADER 0x800
set DAT 0x100
get TSIZE asize
math TSIZE -= HEADER # one calculation before the loop
for i = 1 <= 10000
set FSIZE TSIZE # just take the already calculated variable
set SUB i
math SUB *= DAT
math FSIZE -= SUB
next i
```

**2. Avoid appending**(thanks for this tip, Luigi )

Instead of

Code: Select all

```
get CYCLES asize
math CYCLES /= 8
set OFFSET 0
append
for i = 1 <= CYCLES
log MEMORY_FILE OFFSET 8
math OFFSET += 8
next i
append
```

Code: Select all

```
get CYCLES asize
math CYCLES /= 8
for i = 1 <= CYCLES
getDstring DATA 8
putDstring DATA 8 MEMORY_FILE
next i
```

**3. Pre-allocate memory**

Whenever you have to write something to MEMORY_FILE, set it's size first:

Code: Select all

```
putVarChr MEMORY_FILE PRE_SIZE 0
log MEMORY_FILE 0 0
```

Code: Select all

```
set PSIZE 0
savepos MYOFF
do
get MSIZE long
savepos OFFSET
math PSIZE += MSIZE
putVarChr MEMORY_FILE PSIZE 0
log MEMORY_FILE 0 0
while [ending argument]
goto MYOFF
do
get MSIZE long
savepos TEMPOFF
getDstring DATA MSIZE
putDstring DATA MSIZE MEMORY_FILE
math TEMPOFF += MSIZE
goto TEMPOFF
while [ending argument]
```