亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: changkaizhao
打印 上一主題 下一主題

[C++] 這個是怎么回事? 新手求解~~~ [復制鏈接]

論壇徽章:
24
金牛座
日期:2013-08-21 07:55:52射手座
日期:2014-09-29 15:36:14摩羯座
日期:2014-10-07 21:42:57天秤座
日期:2014-10-16 10:03:00午馬
日期:2014-10-19 13:40:31酉雞
日期:2014-11-08 08:44:54處女座
日期:2014-11-10 17:01:21午馬
日期:2014-12-06 16:52:38羊年新春福章
日期:2015-02-12 17:41:512015年迎新春徽章
日期:2015-03-04 09:58:1115-16賽季CBA聯(lián)賽之廣夏
日期:2022-10-07 19:41:11巳蛇
日期:2014-09-13 15:29:54
11 [報告]
發(fā)表于 2014-11-02 18:07 |只看該作者
回復 9# shan_ghost
好人, 要學習的還有好多

   

論壇徽章:
0
12 [報告]
發(fā)表于 2014-11-02 18:18 |只看該作者
本帖最后由 changkaizhao 于 2014-11-02 18:22 編輯

回復 9# shan_ghost

首先非常感謝你細心的回答。

1.   對于你提到的第2條:   如果  delete p;   p = nullptr;  后原來指向的堆的內(nèi)存會釋放嗎?

2.   對于第3條, 我確實 在基本的程序 編譯和運行過程中的一些內(nèi)存概念比較模糊。 能否推薦幾本非常好的 C++書 能夠詳細講解程序編譯和運行過程中 內(nèi)存的管理機制。
     
3.   對于 第4條,類信息是全局唯一的,所以怎么調(diào)用類的公共成員函數(shù)都沒問題。 為什么會這樣?類信息表 是什么東西? 我一直以為只有實例化對象(A *p = new A(); 這種方式也算實例化對象嗎?)后才能調(diào)用類函數(shù)。  對于編譯器 而言 p -> helloworld();  如下,

__A__helloworld(p);

void __A__helloworld(A* this)
{
    printf("hello world");
}

__A__helloworld();

這些再程序編譯后就是這樣的東西。  
所以我用下面語句也可能得到 結果。
    ((A*)&std::cin)->helloworld();

論壇徽章:
0
13 [報告]
發(fā)表于 2014-11-02 18:23 |只看該作者
回復 10# folklore


    成員函數(shù)保存在哪里?

論壇徽章:
8
CU大;照
日期:2013-04-17 10:59:39CU大;照
日期:2013-04-17 11:01:45CU大;照
日期:2013-04-17 11:02:15CU大;照
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技術圖書徽章
日期:2013-12-04 10:48:50酉雞
日期:2014-01-03 10:32:30辰龍
日期:2014-03-06 15:04:07
14 [報告]
發(fā)表于 2014-11-04 12:44 |只看該作者
回復 12# changkaizhao


  
1.   對于你提到的第2條:   如果  delete p;   p = nullptr;  后原來指向的堆的內(nèi)存會釋放嗎?


會。執(zhí)行delete時已經(jīng)釋放。


2.   對于第3條, 我確實 在基本的程序 編譯和運行過程中的一些內(nèi)存概念比較模糊。 能否推薦幾本非常好的 C++書 能夠詳細講解程序編譯和運行過程中 內(nèi)存的管理機制。

建議先看c++ prime之類書籍,并盡量多做練習,把指針徹底搞懂。


然后,如果有興趣的話,可以看微機原理、操作系統(tǒng)原理,以及可執(zhí)行文件的格式、載入及執(zhí)行機制等方面的知識。

這是因為,c/c++雖然幾乎一刻都離不開內(nèi)存管理;但這門語言只是通過malloc/free和new/delete在申請、歸還內(nèi)存而已,并未深入細節(jié),也不需要深入細節(jié)(所以c/c++相關標準根本就不提堆這回事)。



3.   對于 第4條,類信息是全局唯一的,所以怎么調(diào)用類的公共成員函數(shù)都沒問題。 為什么會這樣?類信息表 是什么東西? 我一直以為只有實例化對象(A *p = new A(); 這種方式也算實例化對象嗎?)后才能調(diào)用類函數(shù)。  對于編譯器 而言 p -> helloworld();  如下,

__A__helloworld(p);

void __A__helloworld(A* this)
{
    printf("hello world");
}

__A__helloworld();

這些再程序編譯后就是這樣的東西。  
所以我用下面語句也可能得到 結果。
    ((A*)&std::cin)->helloworld();



簡單說,類內(nèi)部函數(shù)會被按一定格式重命名(如 classA::func1_void_void),編譯后存儲于一個叫代碼段的特殊位置(現(xiàn)代操作系統(tǒng)中,只有這個段的內(nèi)容才是可執(zhí)行的)。

然后,調(diào)用這個函數(shù),就是用一條call指令跳到代碼段的對應位置執(zhí)行,執(zhí)行完成后,通過一條ret指令返回當初的call指令的下一條指令位置繼續(xù)執(zhí)行(call指令執(zhí)行時,會把自己的位置壓入棧中)。


換句話說,類成員函數(shù)與類綁定,并不會為每個對象存儲一份(否則要多浪費多少空間)。


這個綁定信息(包括有哪些成員函數(shù)、成員變量、虛函數(shù)入口表內(nèi)容等信息),則會放到一個全局的、以class名稱(實際可能是class id)索引的數(shù)據(jù)結構中去。



而classA實例化的對象A,則可能是這個格式:
A ----> {
   vptr;            //指向虛函數(shù)入口表,有虛函數(shù)才會有這個

   int i;            //你定義的成員變量
}



這些對象布局的知識,在比較靠譜的c++教材中是應該提到的。

論壇徽章:
0
15 [報告]
發(fā)表于 2014-11-09 22:39 |只看該作者
回復 14# shan_ghost


    多謝 大神指點,受益匪淺~~~
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP