つまり、呼び出されるたびにmalloc()
システムコールは実行されるのでしょうか? (あらかじめ大きなチャンクを割り当てておいた場合)C++ new演算子はmalloc()を下に使用しますか?
1
A
答えて
0
つまり、呼び出されるたびに
malloc()
システムコールは実行されるのでしょうか?
これは実際に実装に依存しています。しかし、通常new
の実装では、malloc()
syscalls/c-libraryバインディングが使用されます。
(事前に多分割り当てによって大きな塊)
はい、あなたは欠点としてそれを考慮する必要があります。単一char
が必要になるよりも頻繁に、割り当てられた大きなチャンクを不必要に動的なストレージスペースを乱雑にも
char* newChar = new char();
のようなものを呼び出します。
さらに効率的なメモリ管理のためにその動作をオーバーライドする場合は、いつでもplacement new
を使用できます。
0
他の人が言っているように、これは実装定義です。しかし、高性能なC++実装ではおそらくmalloc()は使用されませんが、OS特有のメモリ割り当てAPIやシステムコール(malloc()はそれ自身で使用する必要があります)を使用すると思います。結局のところ、すべてのメモリ割り当てに特別な関数呼び出しを追加するのはなぜですか?しかし、私はこれについての確かな証拠はありません。
0
C++ 14より前では、実装では実装の割り当てを禁止していました。そのため、それぞれのnew
式は、システム割り当て関数(おそらくmalloc
)の呼び出しと1対1で対応していました。
C++ 14 relaxed this restrictionである場合がある。 1つのライフタイムが厳密に他のライフタイムの寿命内にある場合、実装は割り当てを組み合わせることが可能になりました。しかしこれはかなり狭い制限ですので、実際には割り当てを実際に組み合わせることはしません。
関連する問題
- 1. C++ 'new'演算子 - 使用モード?
- 2. new演算子はC#
- 3. C++ - オーバーロード演算子new
- 4. エラーは、new演算子
- 5. jQuery.Deferred() - "new"演算子はオプションですか?
- 6. 奇妙なC++のnew演算子の使用
- 7. 'new'演算子の理解
- 8. Javaではnew演算子が必要ですが、C++ではnew演算子が必要です
- 9. shared_ptrとnew演算子:どちらを使用するか
- 10. size_tパラメータnew演算子
- 11. なぜnewはC++の演算子ですか
- 12. 新しい演算子はnewまたはnew []と呼ばれますか?
- 13. 演算子( - - )()演算子C#
- 14. C++は演算子deleteをauto(スタック)ポインタに使用します
- 15. 下付きクラスベクトルへの下付き演算子のC++添字演算子
- 16. ImageViewとjava(Android)のnew演算子を使用する対比
- 17. mallocを新しい演算子に変更する
- 18. C++ 'new'演算子に関する問題?
- 19. クラスnewとdelete演算子でメモリリークを処理するC++
- 20. PythonでAND演算子とNOT演算子を使用する
- 21. C#の3進演算子を使用
- 22. new演算子はどこに新しいオブジェクトを作成しますか?
- 23. new演算子と参照エラー
- 24. new(:: new)の前にスコープ解決演算子を使用するのはいつですか?
- 25. 演算子は= C++
- 26. C++コンストラクタ内でnew演算子を使用するのは正しいですか?
- 27. C++演算子()括弧 - 演算子Type()vs型演算子()
- 28. C++演算子+演算子+ =オーバーロード
- 29. C++:演算子オーバーロード、演算子+
- 30. 特定のクラスのnew演算子とdelete演算子をオーバーライドする理由は何ですか?
実装に依存しています。 –
mallocはシステムコールではなく、Standard Cライブラリの関数です。 –
@Neilそれを採用しました。 –