Certainly compile time allocation is better if you can do it…
I do embedded systems where the customer configures the device as desired for that customer, and then sends it out (maybe 1000kms) into the field.
The order of decreasing niceness is…
- Everything is guaranteed to work at compile time.
- Everything is guaranteed to work at link time. (We build tens of product variants from the same source).
- Everything is guaranteed to work when the customer presses “Go” to reconfigure (or the configuration app, has in a user friendly manner, prevented him from creating an unworkable configuration).
- Everything works if it boots.
- You find out in the field that it doesn’t work.
We try hard never to get down to level 4, but if you’re testing new versions of the software, 5. becomes…
- You find out after after hours of testing on the racks, or worse, when you release 1000’s of hard to upgrade devices to quality sensitive customers.