我一直在閱讀一個小時,仍然沒有得到我的應用程序正在發生什麼。 由於我使用new
和delete
的對象實例,我需要自己管理內存。我的應用程序需要很長的正常運行時間,因此正確管理內存消耗對我來說非常重要。在C++中,傳遞指針仍然會複製對象?
這是我用來轉儲datapacket的靜態函數,它在PC和I/O板之間在兩個方向上傳輸。數據包是一個的數組,並被封裝到一個對象中,或者是DCCmd
或者DCReply
(都是抽象DCMessage
類的實現)。
void DebugTools::dumpBytes(BYTE* bytes, short length)
{
printf(" |---DUMPING DATAPACKET refId: %d ....\n", &bytes);
for(short i=0; i<length; i++){
printf(" | B%d | %.2X\n", i, bytes[i]);
}
printf(" |---END DUMP refId: %d ....\n", &bytes);
}
再有就是這個用例:我創建了一個DCCmd
對象,並將其添加到傳出消息隊列進行發送。 「泵」(一個無限循環)檢查發件箱並將任何候選人傳遞給一個IOConnector
單身物件。
DCCmd* cmd = new DCCmd(DIG_CMD_SELFTEST_RES);
cmd->add(param);
printf("cmdSelfTest()\n"); //HACK
BYTE* cmda = cmd->getBytes(); //HACK
DebugTools::dumpBytes(cmda, cmd->getLength()); //HACK
sendMsg(cmd);
...並添加到隊列:
bool DC::sendMsg(DCMessage* msg)
{
if(isOnline()){
outbox->add(msg);
return true;
} else {
return false;
}
}
添加到隊列與void add(DCMessage* msg);
完成(在連接器類有另一個這些dumpBytes()
,看看什麼是真正將被髮送)
但是,這裏的輸出:
TESTING MESSAGE QUEUES ....
cmdSelfTest()
|---DUMPING DATAPACKET refId: 2489136 ....
| B0 | C6
| B1 | A1
| B2 | 00
| B3 | 01
| B4 | 10
| B5 | 00
| B6 | 01
| B7 | 78
|---END DUMP refId: 2489136 ....
adding to queue: 2488884
queues: inbox (0), outbox (1)
send: sending candidates....
sending 2489164 ....
>->-> ...
|---DUMPING DATAPACKET refId: 2488704 ....
| B0 | C6
| B1 | A1
| B2 | 00
| B3 | 01
| B4 | 10
| B5 | 00
| B6 | 01
| B7 | 78
|---END DUMP refId: 2488704 ....
Packet sent!
. ((second iteration of the pump))
queues: inbox (0), outbox (1)
send: sending candidates....
sending 2489164 ....
>->-> ...
|---DUMPING DATAPACKET refId: 2488704 ....
| B0 | C6
| B1 | A1
| B2 | 00
| B3 | 01
| B4 | 10
| B5 | 00
| B6 | 01
| B7 | 78
|---END DUMP refId: 2488704 ....
Packet sent!
有人可以請一些光爲什麼每次我從一個塊傳遞到另一個時,引用是不同的?這對內存消耗意味着什麼?我怎樣才能確保我沒有複製內存?謝謝。
事實上,在我檢查我是否使用同一陣列副本時修改了這一點以及所有的出現,在整個應用程序中輸出了相同的地址。指針實際上按預期工作,非常棒! – 2009-09-22 09:47:15