先自問一個問題:C++有幾種new?
我一直以為是兩種:operator new 和 placement new。剛剛查了下,原來是3種:還有一個是new operator。而且,我還弄錯了一個...但是,無論如何,我們能夠改變的只有兩個:
1、operator new,分配內存。
2、placement new,構造對象。
而剩下的那個new operator很直白:負責調用上面兩個new。也就是其僅僅是語法層次上的東西,用來產生operator new和placement new的語義。
這是一個不錯的開始,因為我要講的“內存管理”,其實是上面所提到的所有:內存分配和對象構造。當然,還有一個對稱的內存釋放和對象析構,這些自然也會有,只是相對來說前者更加直白和重要?;蛘?,我可以換一個題目:內存與對象管理技術。
這將是一個,或者說數個相當大的話題;你不信,我可以給你一個列表(別眨眼):
1、內存池,特別是一個可用的內存池,構建一個是相當困難的!其需要達到數個極其苛刻的要求:強悍的性能(否則我們還需要它?)、并發(fā)且線程安全(這點和上一點幾乎是矛盾的存在)、高可用性(意味著其有著合理的回收機制,否則可能會浪費大量內存;而且能夠處理相當畸形的環(huán)境,比如單一線程分配,單一線程回收)、可調試(簡直不可能!!!)。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26