Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在哪里可以找到C+中运算符new的精确实现+;?_C++_Gcc_New Operator - Fatal编程技术网

C++ 在哪里可以找到C+中运算符new的精确实现+;?

C++ 在哪里可以找到C+中运算符new的精确实现+;?,c++,gcc,new-operator,C++,Gcc,New Operator,Operator new有时使用malloc实现,在运行Raspbian的嵌入式系统中可以找到它的确切实现 < >在哪里可以找到C++中的算子new的精确实现?< /P> 你会在C++标准库的源代码中找到。以下是来自: 如您所见,在本例中,它是通过malloc实现的 在嵌入式系统中 嵌入式系统的标准库通常是独立的,因此不一定提供malloc或new 我说拉斯宾 Raspbian是一个相当成熟的操作系统。默认情况下,它将使用libstdc++。对于用户空间代码,它是这样的:,与大多数linux发行

Operator new有时使用malloc实现,在运行Raspbian的嵌入式系统中可以找到它的确切实现

< >在哪里可以找到C++中的算子new的精确实现?< /P>

你会在C++标准库的源代码中找到。以下是来自:

如您所见,在本例中,它是通过
malloc
实现的

在嵌入式系统中

嵌入式系统的标准库通常是独立的,因此不一定提供
malloc
new

我说拉斯宾


Raspbian是一个相当成熟的操作系统。默认情况下,它将使用libstdc++。

对于用户空间代码,它是这样的:,与大多数linux发行版上运行的代码相同。这取决于您所说的“嵌入式”是什么意思。我的猜测是,如果你统计所有不同的嵌入式设备,你会发现大多数都在运行Linux或*BSD。(也就是说,按型号计算,而不是按单个设备的数量计算)。@MartinBonner是的,我想“嵌入式”没有单一的硬定义。如果你认为嵌入到更大实体中的计算机是“嵌入式系统”(这是一个非常好的定义),那么从编程的角度来看,关于嵌入式系统的问题就变得毫无意义,因为嵌入式和非嵌入式之间没有技术上的区别。同意Martin Bonner的观点。嵌入式系统的定义本质上是一个计算机系统,它在一个更大的系统中提供一组专用的功能。它与操作系统无关。有带操作系统的嵌入式系统,也有不带操作系统的嵌入式系统,而且相当多的嵌入式系统运行基于Linux或BSD的操作系统,这仅仅是因为这样的操作系统易于以低成本、可配置的方式提供,并且提供了许多有用的功能,使系统更容易集成到更大的系统中。正是系统的使用使其成为嵌入式系统,而不是托管Raspberry Pi,传统上,“嵌入式”是“有限资源”的同义词。这个词的使用意味着最多只有几MB的内存,通常是几kB甚至几字节,缺少一些基本的硬件功能(没有FPU,没有分页,…)。所有这些都使得环境无法支持符合标准的libc,更不用说libc++。这类系统通常不具有
printf
malloc
。另一方面,他们处理非标准的东西:中断向量,硬件上的直接I/O,……我想习惯于使用这种系统的人保留了“嵌入式”的含义。
_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;
}