Re:Dangerous Embedded C Coding Standard Rules (2011)
by nitrogen on Monday December 30, 2013 @04:13PM
(#6986997)
I'm not particularly familiar with x86-64 calling conventions. Where is the code that sets up the stack frame? Would this code look different if temp were created inside the if() block, not just initialized there?
[ Parent
| on HN ]
Re:Dangerous Embedded C Coding Standard Rules (2011)
by optymizer1 on Monday December 30, 2013 @11:23PM
(#6988931)
In C, variables have function-level storage. I don't recall the actual term from the C standard, but the storage for _all_ variables declared in any blocks inside a function is allocated at the beginning of the function, when the stack frame is set up. So there is 'no way' to create 'temp' only inside the if block.
Re:Dangerous Embedded C Coding Standard Rules (2011)
by nitrogen on Tuesday December 31, 2013 @12:03AM
(#6989076)
Okay. I knew variables had block-level scope. I've read some of the ISO C standard, but hadn't caught the part where variables have function-level storage. I was wondering because, years ago, I read some disassembled code that did lots of stack allocations in the middle of functions, and not just for the purpose of calling another function.
Can you point to a reference showing that variables have function-level storage? The closest I can find in the C standard draft I'm looking at is 6.2.4.6, which suggests block-level lifetimes for variables: "For such an object that does not have a variable length array type, its lifetime extends from entry into the block with which it is associated until execution of that block ends in any way."