C语言,获得堆栈增长方向的一种方法
生活随笔
收集整理的這篇文章主要介紹了
C语言,获得堆栈增长方向的一种方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載:http://blog.chinaunix.net/uid-2413049-id-109836.html
在閱讀wget源代碼的過程中,發現一個用C語言實現,獲得堆棧增長方向的巧妙方法
wget版本為1.11.4
實現代碼:
| static void find_stack_direction () { ? static char *addr = NULL;???? /* Address of first `dummy', once known.? */ ? auto char dummy;????????????? /* To get stack address.? */ ? if (addr == NULL) ??? {?????????????????????????? /* Initial entry.? */ ????? addr = ADDRESS_FUNCTION (dummy); ????? find_stack_direction ();? /* Recurse once.? */ ??? } ? else ??? { ????? /* Second entry.? */ ????? if (ADDRESS_FUNCTION (dummy) > addr) ??????? stack_dir = 1;????????? /* Stack grew upward.? */ ????? else ??????? stack_dir = -1;???????? /* Stack grew downward.? */ ??? } } |
簡化后的相關定義:
| static int stack_dir;?????????? /* 1 or -1 once known.? */ #define ADDRESS_FUNCTION(arg) &(arg) |
find_stack_direction函數使用函數遞歸的方法
第一次進入,由于addr為NULL,所以將字符變量dummy的地址賦值給靜態變量addr
第二次進入,由于靜態變量addr已賦了值,所以進入 "Second entry."
接著,將第二次進入的dummy地址和第一次進入的dummy地址相比較
如果值為正,則堆棧向高地址增長;否則,堆棧向低地址增長
巧妙地運用了“函數遞歸也使用了堆?!钡乃枷?,漂亮 :)
轉載于:https://www.cnblogs.com/pengdonglin137/articles/4620576.html
總結
以上是生活随笔為你收集整理的C语言,获得堆栈增长方向的一种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习日常-编码与字符串格式化
- 下一篇: bundle install 出现 #