2017-08-31 61 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

相关问题