2017-08-31 62 views
1

運營商新的有時使用malloc,一個在那裏可以找到它的具體實現在嵌入式系統中,運行說Raspbian實現。從哪裏可以找到C++中operator new的確切實現?

+0

對於用戶空間代碼,它是這樣的:https://sourceware.org/git/?p=glibc.git;a=tree;f=malloc;h=1103943adc88e23a879cea14b55d730d06516b11;hb=HEAD,它和運行時一樣在大多數Linux發行版上。 – nos

回答

1

一個在哪裏可以找到C++新的確切實施操作的?

你會發現在C++標準庫的源代碼中。下面是從libstdc++一個:

_GLIBCXX_WEAK_DEFINITION void * 
operator new (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc) 
{ 
    void *p; 

    /* malloc (0) is unpredictable; avoid it. */ 
    if (sz == 0) 
    sz = 1; 

    while (__builtin_expect ((p = malloc (sz)) == 0, false)) 
    { 
     new_handler handler = std::get_new_handler(); 
     if (! handler) 
    _GLIBCXX_THROW_OR_ABORT(bad_alloc()); 
     handler(); 
    } 

    return p; 
} 

正如你所看到的,正是在這種情況下,與malloc實現。

在嵌入式系統

的標準庫的嵌入式系統的

通常獨立,因此沒有必要提供mallocnew在所有。

運行說Raspbian。

Raspbian是一個幾乎完全成熟的操作系統。它會默認使用libstdC++。

+0

取決於你所說的「嵌入」。我的猜測是,如果你計算所有不同的嵌入式設備,你會發現大多數運行Linux或* BSD。 (也就是說,按型號計算,而不是個別設備的數量)。 –

+0

@MartinBonner是的,我想對於「嵌入」沒有單獨的硬定義。如果從嵌入到較大實體的計算機是一個「嵌入式系統」(這是一個完全精細的定義)的角度來看,那麼從編程的角度來看,關於嵌入式系統的問題變得毫無意義,因爲嵌入式系統與非嵌入式的。 – user2079303

+0

同意Martin Bonner。嵌入式系統的定義本質上是一個計算機系統,它在更大的系統中提供了一套專用的功能。它與操作系統無關。有和沒有操作系統的嵌入式系統,並且很多運行基於Linux或BSD的操作系統,僅僅是因爲這樣的操作系統很容易以低成本,可配置的方式獲得,並且提供了許多有用的功能,使得它們易於集成系統在更大的系統內。它是嵌入式系統的用法,不包含Raspberry Pi或不包含 – Peter

相關問題