Then the answer is rather simple:
- stack checking indeed adds code, but it is meant for Pascal code, not for assembler.
- When you choose to use inline assembler you loose this functionality. YOU ARE ON YOUR OWN.
- You can enable or disable stack checking in a per method/procedure/function basis with {$PUSH}{$S+/-}<your procedure or function>{$POP}
- There is no way any compiler in any language can check the stack - in compiled code! - without code modifications: {$S+} owns the stack.
- Usually there is no need for inline assembler.. always
profile: the compiler has a better way of scheduling for the CPU caches for example. A trap many programmers fail to avoid.
The older I get, the less I use pure assembler, merely because of the complexity of cache lines.
Profile.
And the short answer is simply {$S+/-} is useless for assembler routines, which you could have guessed anyway: black can't be white.
Google on "stack canary" and you know why.
[edit] wait I did that for you:
https://en.wikipedia.org/wiki/Buffer_overflow_protection