換句話說,每次調用它時,系統調用是否執行malloc()
? (可能預先分配一個大塊)C++新操作符在底下使用malloc()嗎?
1
A
回答
0
換句話說,每次調用它時,系統調用是否需要執行
malloc()
?
它實際上是實現依賴。但是通常new
的實現將使用malloc()
系統調用/ c庫綁定。
(也許分配了大量提前塊)
是的,你必須考慮到,作爲一個缺點。頻繁調用像
char* newChar = new char();
可分配更大的塊不必要的混亂您的動態存儲空間,多單char
需要。
如果您希望覆蓋該行爲以獲得更高效的內存管理,則始終可以使用placement new
。
0
正如其他人所說,這是實現定義。但是,我認爲高性能的C++實現可能不會使用malloc(),但會使用特定於操作系統的內存分配API或系統調用(malloc()必須使用它)。畢竟,爲什麼要爲每個內存分配添加一個額外的函數調用?但我沒有這方面的確鑿證據。
0
在C++ 14之前,該標準禁止實施合併分配。因此,每個new
表達式確實與一個系統分配函數(可能是malloc
)的調用一一對應。
C++ 14 relaxed this restriction在某些情況下。如果一個人的生命週期完全在另一個人的生命週期內,那麼現在就有可能將這個分配結合起來。儘管這是一個相當狹窄的限制,所以我預計分配實際上並不經常結合。
相關問題
- 1. 如何在C#中實現malloc操作#
- 2. 我在c過度使用malloc嗎?
- 3. 使用malloc在C
- 4. 使用malloc和POSIX文件操作
- 5. C++新操作符能在Windows上自動使用大頁面嗎?
- 6. 在C使用malloc不工作
- 7. 使用操作符重載在C++
- 8. malloc和free的內存操作到底做了什麼?
- 9. 在C++中使用char的新操作符
- 10. C++新操作符分配新內存
- 11. C#中的新操作符和虛擬操作符
- 12. 使用字符串流操作底層字符串對象
- 13. C++我應該重載操作符嗎?
- 14. Objective-C中的@操作符與C中的&操作符相同嗎?
- 15. C:正確使用malloc作爲鏈表
- 16. 如何在重載的新操作符中使用new操作符?
- 17. 我正確使用malloc嗎?
- 18. 在c#中有可用的observable的if/then/else操作符嗎?
- 19. C++讀取使用操作符>>
- 20. C++操作符重載和使用
- 21. 使用字符串操作C#
- 22. 如何重新定義malloc()在Linux中使用C++新
- 23. map/fold操作符(用C++)
- 24. C++新操作符 - 內存佈局
- 25. 快捷鍵操作符在目標C中工作嗎?
- 26. 使用$#操作符
- 27. 使用「:」操作符
- 28. 重新定義線程安全的malloc在FreeRTOS操作系統
- 29. Objective-C ^操作符
- 30. 逗號操作符用法在C
執行依賴我想象。 –
malloc不是系統調用,它是標準C庫中的一個函數。 –
@ Neil通過了。 –