オペレータnewはmallocで実装されることがありますが、そこではRaspbianを実行している組み込みシステムでの正確な実装を見つけることができます。C++で演算子newの正確な実装を知るには?
答えて
ここで、C++でoperator newの正確な実装を見つけることができますか?
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
で実装、この場合です。組み込みシステム
組み込みシステムの標準ライブラリで
は、典型的には、自立あり、従って必ずしも
malloc
又はnew
に全てを提供しません。実行中のRaspbian。
Raspbianは、かなり吹き飛んだオペレーティングシステムです。これはデフォルトでlibstdC++を使用します。
「埋め込み」の意味によります。私が推測していることは、さまざまな組み込みデバイスをすべて数えれば、ほとんどがLinuxまたは* BSDを使用していることになります。 (つまり、個々のデバイスの数ではなく、モデルによってカウントされます)。 –
@MartinBonnerええ、私は "埋め込み"のための特異なハード定義はないと思います。より大きなエンティティに埋め込まれたコンピュータが「組み込みシステム」(完全に精細な定義)であるという視点をとった場合、組み込みシステムに関する質問は、プログラミングの観点からは無意味になります。埋め込まれていない。 – user2079303
Martin Bonnerと同意します。組み込みシステムの定義は、本質的に、より大きなシステム内に専用の機能セットを提供するコンピュータシステムです。オペレーティングシステムを持つこととは何の関係もありません。オペレーティングシステムの有無にかかわらず、LinuxやBSDベースのOSを実行している組込みシステムがありますが、そのようなOSは低コストで簡単に利用でき、構成可能であり、システムを大規模システム内で使用することができます。ラズベリーパイをホストしていない、それを埋め込むシステムの使用 – Peter
ユーザースペースコードについては、https://sourceware.org/git/?p=glibc.git;a=tree;f=malloc;h=1103943adc88e23a879cea14b55d730d06516b11;hb=HEAD、これは実行中と同じですほとんどのLinuxディストリビューションで。 – nos