百度筆試題:堆與棧的區別

因爲整張試卷都是代碼題,因此將題理解爲程序員編程對內存管理的一些瞭解


回來找到一些技術博客,覺得寫得很好,轉發了。

http://blog.sina.com.cn/s/blog_a0e859400101279a.htm

棧增長和大端/小端問題是和CPU相關的兩個問題。
在內存管理中,與棧對應是堆。對於堆來講,生長方向是向上的,也就是向着內存地址增加的方向;對於棧來講,它的生長方式是向下的,是向着內存地址減小的方向增長。在內存中,“堆”和“棧”共用全部的自由空間,只不過各自的起始地址和增長方向不同,它們之間並沒有一個固定的界限,如果在運行時,“堆”和 “棧”增長到發生了相互覆蓋時,稱爲“棧堆衝突”,系統肯定垮臺。
在常見的x86中內存中棧的增長方向就是從高地址向低地址增長。
我們可以通過一些代碼來判斷棧的增長方向:

複製代碼
#include<stdio.h>  
static int stack_dir;  
static void find_stack_direction (void)  {  
    static char   *addr = NULL;     
    char     dummy;            

    if (addr == NULL)  
    {                             
        addr = &dummy;  

        find_stack_direction ();    
    }  
    else                            
        if (&dummy > addr)  
            stack_dir = 1;              
        else  
            stack_dir = -1;             
}  

int main(void)  
{  
    find_stack_direction();  
    if(stack_dir==1)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章