Y
Hacker News
new
|
ask
|
show
|
jobs
by
wenderen
4398 days ago
I think the line above the printf call should be
arr[2] = 3;
I ran your program and I got 4. Then I changed arr[1] to arr[2] and got 5, as I expected.
2 comments
Kenji
4398 days ago
It's only likely, but not certain that a or b get overwritten. How your stack is laid out is entirely up to the compiler. arr[1] is already out of bounds, however, we don't know for certain what's immediately above the array.
link
codeflo
4398 days ago
With compiler optimizations turned on, it's almost guaranteed
not
to happen, because a and b are very likely to be stored in CPU registers.
link
mgraczyk
4398 days ago
Or rather, a and b will be constant folded so that the printf call is optimized to "push #4; push ptrFmt; call printf"
link
Someone
4398 days ago
A truly good compiler would replace that printf by a call to putchar or pass a constant string to 'write' (gcc almost (?) does that. See
http://www.ciselant.de/projects/gcc_printf/gcc_printf.html
)
link
wyager
4398 days ago
The compiler is probably aligning all stack elements to 8 bytes.
link