[問題] DLL間heap使用的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2008
問題(Question):
請問 dll 間 heap 的使用要注意什麼呢?
在網路上找來的資料是說最好在dll內部new及delete
不要由第三方來delete,以確保程式new, delete的runtime是同一份
下頭是我的作法,在obj.dll中的所有class,
都寫了operator new, operator delete去呼叫obj.dll cpp中的memory alloctor
我以為這樣就可以把使用dll的所有heap生成在跟obj.dll cpp的heap中
但我試著在另一個explicit link的dll使用obj.dll來產生object
把pointer傳給main, 然後就free掉此library.
我的想法是此object是生成在obj.dll的heap中,就算此dll被freelibrary掉,
應該也不會影響到剛剛new出來的object才是,
可是我在main中delete此object時會出現錯誤,
是我那裡的觀念不對呢?
如果在linux下,情況又是如何呢?
程式碼(Code):
obj.dll:
//obj_dll.h
class CMemoryAlloc
{
public:
static void* AllocMemory(size_t alloc_size);
static void FreeMemory(void *alloc_pointer);
};
class CObject
{
public:
......
void* operator new(size_t alloc_size)
{
//轉呼叫dll內部的new
return CMemoryAlloc::AllocMemory(alloc_size);
}
void operator delete(void *alloc_pointer)
{
CMemoryAlloc::FreeMemory(alloc_pointer);
}
};
//obj_dll.cpp
void* CMemoryAlloc::AllocMemory(size_t alloc_size)
{
//我認為這裡new使用的heap會跟obj.dll用的是同一份
return ::operator new(alloc_size);
}
void CMemoryAlloc::FreeMemory(void *alloc_pointer)
{
::operator delete(alloc_pointer);
}
///////////////////////////////////////////////////
create.dll:
//create_dll.cpp
CObject* CreateObject(void)
{
return new CObject;
}
///////////////////////////////////////////////////
main program:
//implicit linking obj.dll
//explicit linking create.dll
int main(void)
{
........
module=LoadLibrary("create.dll");
func=GetProcAddress(module,"CreateObject");
//在create.dll裡頭呼叫obj.dll中的CMemoryAlloc::AllocMemory來產生object
CObject* obj=func();
//把create.dll release
FreeLibrary(module);
//在此時delete obj時會出錯,不能印證我的想法
delete obj;
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.31.42
推
01/28 01:12, , 1F
01/28 01:12, 1F
→
01/28 01:13, , 2F
01/28 01:13, 2F
→
01/28 01:13, , 3F
01/28 01:13, 3F
推
01/29 23:19, , 4F
01/29 23:19, 4F
→
01/30 02:41, , 5F
01/30 02:41, 5F
→
01/30 02:43, , 6F
01/30 02:43, 6F
→
01/30 02:43, , 7F
01/30 02:43, 7F
推
01/30 17:38, , 8F
01/30 17:38, 8F
→
01/30 20:03, , 9F
01/30 20:03, 9F
→
01/30 20:04, , 10F
01/30 20:04, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章