The stacksize
pragma sets the initial size of the run-time
stack and may also define the policy of its growing, in case it
becomes full. The default stack size is 4096 words. You may
need to increase this number if your configuration program uses
recursive functions or does an excessive amount of string manipulations.
Sets stack size to size units. Optional incr and max define stack growth policy (see below). The default units are words. The following example sets the stack size to 7168 words:
#pragma stacksize 7168
The size may end with a unit size suffix:
Suffix | Meaning |
---|---|
k | Kiloword, i.e. 1024 words |
m | Megawords, i.e. 1048576 words |
g | Gigawords, |
t | Terawords (ouch!) |
Table 4.1: Unit Size Suffix
File suffixes are case-insensitive, so the following two pragmas are
equivalent and set the stack size to 7*1048576 = 7340032
words:
#pragma stacksize 7m #pragma stacksize 7M
When the MFL engine notices that there is no more stack space available, it attempts to expand the stack. If this attempt succeeds, the operation continues. Otherwise, a runtime error is reported and the execution of the filter stops.
The optional incr argument to #pragma stacksize
defines growth
policy for the stack. Two growth policies are implemented:
fixed increment policy, which expands stack in a fixed
number of expansion chunks, and exponential growth policy, which
duplicates the stack size until it is able to accommodate the needed
number of words. The fixed increment policy is the default. The default
chunk size is 4096 words.
If incr is the word ‘twice’, the duplicate policy is selected. Otherwise incr must be a positive number optionally suffixed with a size suffix (see above). This indicates the expansion chunk size for the fixed increment policy.
The following example sets initial stack size to 10240, and expansion chunk size to 2048 words:
#pragma stacksize 10M 2K
The pragma below enables exponential stack growth policy:
#pragma stacksize 10240 twice
In this case, when the run-time evaluator hits the stack size limit, it expands the stack to twice the size it had before. So, in the example above, the stack will be sequentially expanded to the following sizes: 20480, 40960, 81920, 163840, etc.
The optional max argument defines the maximum size of the stack. If stack grows beyond this limit, the execution of the script will be aborted.
If you are concerned about the execution time of your script, you
may wish to avoid stack reallocations. To help you find out the
optimal stack size, each time the stack is expanded,
mailfromd
issues a warning in its log file, which looks like
this:
warning: stack segment expanded, new size=8192
You can use these messages to adjust your stack size configuration settings.