[[ blog 이사 과정에서 정확한 posting날짜가 분실됨. 년도와 분기 정도는 맞지 않을까? ]]
Ascending Stack : The stack grows upwards, starting from a low address and progressing to a higher address.
Descending Stack : The stack grows downwards, starting with a high address and progressing to a lower one.
Fundamentally, these two are same. But, I prefer descending stack, because when stack is broken, mostly post-stack-section(higher memory address) tends to be broken. So,
- [case1 : current stack has enough free space]
Descending stack is better to detect stack-corruption than ascending stack.
void func_test(void) { (omitted...) char a[10]; // ---(*1) (omitted...) memcpy(a, data, len); // len > 10 ---(*2) (omitted...) }
If stack space after (*1) is not used, then even if stack is corrupted, it is very difficult to detect in ascending stack.
(because, no one uses corrupted area.) So, debugging is more difficult.
- [case2 : current stack is almost pull]
In descending stack, usually, corrupting stack of specific
thread(Thread A) affects it's own behavior firstly. So, it is easier to
debug - same with [case1].
In ascending stack, corrupting stack may
affects to other thread's stack - thread whose stack is just next
(higher address) of Thread A - firstly with high possibility
(especially, if several stacks are adjacent in memory space). This
usually leads to debugging-nightmare
'Study > Computer Science' 카테고리의 다른 글
[Study] Understanding XOR operation (0) | 2008.07.07 |
---|---|
[Study] Full Stack Vs. Empty Stack (0) | 2007.01.08 |