4D v13.4Arrays and Memory |
||||||||||||||||||||||||||||
|
4D v13.4
Arrays and Memory
|
Array Type | Formula for determining Memory Usage in Bytes |
Boolean | (31+number of elements)\8 |
Date | (1+number of elements) * 6 |
String (Unicode mode) | (1+number of elements) * (Sum of the size of each text) |
String (ASCII compatibility mode) | (1+number of elements) * Declared length (+1 of odd, +2 if even) |
Integer | (1+number of elements) * 2 |
Long Integer | (1+number of elements) * 4 |
Picture | (1+number of elements) * 4 + Sum of the size of each picture |
Pointer | (1+number of elements) * 16 |
Real | (1+number of elements) * 8 |
Text (Unicode mode) | (1+number of elements) * (Sum of the size of each text) |
Text (ASCII compatibility mode) | (1+number of elements) * 6 + Sum of the size of each text |
Two-dimensional | (1+number of elements) * 12 + Sum of the size of each array |
Notes:
When working with very large arrays, the best way to handle full memory situations is to surround the creation of the arrays with an ON ERR CALL project method. Example:
` You are going to run a batch operation the whole night
` that requires the creation of large arrays. Instead of risking
` occurrences of errors in the middle of the night, put
` the creation of the arrays at the beginning of the operation
` and test the errors at this moment:
gError:=0 ` Assume no error
ON ERR CALL("ERROR HANDLING") ` Install a method for catching errors
ARRAY STRING(63;asThisArray;50000) ` Roughly 3125K in ASCII mode
ARRAY REAL(arThisAnotherArray;50000) ` 488K
ON ERR CALL("") ` No longer need to catch errors
If(gError=0)
` The arrays could be created
` and let's pursue the operation
Else
ALERT("This operation requires more memory!")
End if
` Whatever the case, we no longer need the arrays
CLEAR VARIABLE(asThisArray)
CLEAR VARIABLE(arThisAnotherArray)
The ERROR HANDLING project method is listed here:
` ERROR HANDLING project method
gError:=Error ` Just return the error code
Product: 4D
Theme: Arrays