探索C++對象模型
摘要: 總之,拿著一把刀,庖丁解牛般的剖析語言背后的實現細節,看起來不是那么實用,但是它能讓你對語言的理解更深刻。實際上ATL中大量應用上面的技術,如果沒有對C++ 對象模型有比較深刻的理解,是很難深入下去的。
閱讀全文
posted @
2012-09-21 23:02 Richard Wei 閱讀(4163) |
評論 (2) 編輯
理解C++變量存儲模型
摘要: 通過上面的分析,我們驗證了平時C++書上關于各種類型變量存儲區域的假設,簡單來說就是全局變量和靜態變量會被編譯到可執行文件的數據節(分只讀和可讀寫)中, 非靜態的局部變量則分配在堆棧(stack)上,而new(malloc)出來的內存則分配在堆(heap)上。
閱讀全文
posted @
2012-09-20 21:57 Richard Wei 閱讀(2475) |
評論 (0) 編輯
理解程序內存
摘要: 通過上面的介紹,相信大家對程序內存有了比較全局的理解,以后大家分析問題,遇到一個地址,首先要判斷這個地址分布在哪里:
如果是Image上,那么是在哪個模塊中,這個地址是屬于該模塊的代碼段(.text)還是數據段(.data),如果是代碼段,又是屬于哪個函數?
如果是Heap上,那么究竟是在哪個堆里面,是我們new出來的嗎,是在什么時候new的(new時堆棧狀況)?
如果是在Stack上,那么究竟是屬于哪個線程的堆棧,當時線程的堆棧是怎么樣?
總之,程序在內存中運行,只有你真正理解了內存,你才能真正懂計算機。
閱讀全文
posted @
2012-09-19 23:24 Richard Wei 閱讀(6879) |
評論 (6) 編輯
C/C++中可變參數的原理
摘要: 從上面的例子我們可以看到,對于可變參數的函數,有2種東西需要確定,一是可變參數的數量, 二是可變參數的類型,上面的例子中,參數數量我們是在第一個參數指定的,參數類型我們是自己約定的。這種方式在實際使用中顯然是不方便,于是我們就有了_vsprintf, 我們根據一個格式化字符串的來表示可變參數的類型和數量,比如C教程中入門就要學習printf, sprintf等。
總的來說可變參數給我們提供了很高的靈活性和方便性,但是也給會造成不確定性,降低我們程序的安全性,很多時候可變參數數量或類型不匹配,就會造成一些不容察覺的問題,只有更好的理解它背后的原理,我們才能更好的駕馭它。
閱讀全文
posted @
2012-09-18 00:04 Richard Wei 閱讀(1981) |
評論 (0) 編輯