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