{
int s;
public:
object()
{
//cout << "create object : "<< s<< endl;
};
virtual ~object()
{
//cout << "destroy object : "<< s << endl;
};
void * operator new (size_t size)
{
cout << "void * operator new (size_t size); size :" << size << endl;
return malloc(size);
};
void * operator new[] (size_t size)
{
cout << "void * operator new[] (size_t size); size :" << size << endl;
return malloc(size);
};
/*void * operator new[] (size_t size, object *op)
{
cout << "void * operator new[] (size_t size, cxObject *op); size :" << size << endl;
return malloc(size);
}; */
/*void operator delete(void * p)
{
cout << "void operator delete(void * p); size :" << size << endl;
}; */
void operator delete(void * p, size_t size)
{
cout << "void operator delete(void * p, size_t size); size :" << size << endl;
free(p);
};
void operator delete[](void *p, size_t size)
{
cout << "void operator delete[](void *p, size_t size); size :" << size << endl;
free(p);
};
/* void operator delete[](void *p, object *op)
{
cout << "void operator delete[](void *p, cxObject *op); size :" << endl;
free(p);
}; */
};
int main(int argc, char *argv[])
{
object * p = new object[10];//大小84
delete[] p;//这里8
return 0;
}
在vc6, vc7下编译都不一样;
g++倒是一样, bcbX有一点差异
这样自己定义内存管理;就无法把握释放的大小;
请问如何得到正确的释放内存大小
16 个解决方案
#1
请问VC6,7,BCB的结果分别是什么?
我只有DEV,不好试.:P
我只有DEV,不好试.:P
#2
no matching operator delete found;
#3
---------- vc6, vc7----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :8
---------- BCB ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :80
---------- G++(DEV) ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :84
这样子怎么编通用的内存池, 我搞不懂;
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :8
---------- BCB ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :80
---------- G++(DEV) ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :84
这样子怎么编通用的内存池, 我搞不懂;
#4
55555555555, 还是没人帮忙
#5
delete[] p;//这里8
这里的理解有问题。
一般,一次new对应一次delete
因此,new的大小因该被记录下来,
在delete的时候,
不管是delete还是delete[],
都按上次new的大小释放空间。
这里的理解有问题。
一般,一次new对应一次delete
因此,new的大小因该被记录下来,
在delete的时候,
不管是delete还是delete[],
都按上次new的大小释放空间。
#6
??
#7
如果每一次都自己记录,要消耗大量的空间时间;
我觉得这里编译器应该帮我们做到;
比如G++就做到了, 可是VC6,7没有, 偏偏又是最常用的;
delete[] p;//这里8
这里会到用调用自定义的
void operator delete[](void *p, size_t size)
可惜size是不正确的;
我觉得这里编译器应该帮我们做到;
比如G++就做到了, 可是VC6,7没有, 偏偏又是最常用的;
delete[] p;//这里8
这里会到用调用自定义的
void operator delete[](void *p, size_t size)
可惜size是不正确的;
#8
没人有好的方案, 哎, 明天解贴
#9
???怎么几百个错误,什么程序啊.........
#10
size_t是什么东西
#11
你用C++为什么不用new和delete呢?
还有你用G++可以正确的做不是你的程序的原因,g++中你可以
char * p = new char[1024];
而只需要delete p就全释放掉了
还有你用G++可以正确的做不是你的程序的原因,g++中你可以
char * p = new char[1024];
而只需要delete p就全释放掉了
#12
怎么几百个错误,什么程序啊.........?
噢, 我在5个编译器下通过;
别告诉我里没包含头文件, 呵呵;
你用C++为什么不用new和delete呢?
我的目的你不明白, 我实现学作内存池;
避免内存的不停的分配释放的消耗;
这里只是想验证new 和delete的size参数是或一致;
如果一致, 我就不需要编hash保存每个指针对应的内存大小;
内存池的代码就会简化
我的意思没表达清楚, 对不起;
见我的http://blog.csdn.net/wujian53/archive/2004/12/06/206506.aspx
这里有我内存池的简单实现, 目的是学习;
我只是实现当个对象的分配, 对于数组的分配, 由于size的缘故没实现;
噢, 我在5个编译器下通过;
别告诉我里没包含头文件, 呵呵;
你用C++为什么不用new和delete呢?
我的目的你不明白, 我实现学作内存池;
避免内存的不停的分配释放的消耗;
这里只是想验证new 和delete的size参数是或一致;
如果一致, 我就不需要编hash保存每个指针对应的内存大小;
内存池的代码就会简化
我的意思没表达清楚, 对不起;
见我的http://blog.csdn.net/wujian53/archive/2004/12/06/206506.aspx
这里有我内存池的简单实现, 目的是学习;
我只是实现当个对象的分配, 对于数组的分配, 由于size的缘故没实现;
#13
o, 9号散分
#14
new分配的内存地址前面4个字节是存放大小的(debug版本)
#15
9号劫分
#16
new分配的内存地址前面4个字节是存放大小的(debug版本)
这可不行, 不具备移植性;
不过谢谢了;
解贴
这可不行, 不具备移植性;
不过谢谢了;
解贴
#1
请问VC6,7,BCB的结果分别是什么?
我只有DEV,不好试.:P
我只有DEV,不好试.:P
#2
no matching operator delete found;
#3
---------- vc6, vc7----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :8
---------- BCB ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :80
---------- G++(DEV) ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :84
这样子怎么编通用的内存池, 我搞不懂;
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :8
---------- BCB ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :80
---------- G++(DEV) ----------
void * operator new[] (size_t size); size :84
void operator delete[](void *p, size_t size); size :84
这样子怎么编通用的内存池, 我搞不懂;
#4
55555555555, 还是没人帮忙
#5
delete[] p;//这里8
这里的理解有问题。
一般,一次new对应一次delete
因此,new的大小因该被记录下来,
在delete的时候,
不管是delete还是delete[],
都按上次new的大小释放空间。
这里的理解有问题。
一般,一次new对应一次delete
因此,new的大小因该被记录下来,
在delete的时候,
不管是delete还是delete[],
都按上次new的大小释放空间。
#6
??
#7
如果每一次都自己记录,要消耗大量的空间时间;
我觉得这里编译器应该帮我们做到;
比如G++就做到了, 可是VC6,7没有, 偏偏又是最常用的;
delete[] p;//这里8
这里会到用调用自定义的
void operator delete[](void *p, size_t size)
可惜size是不正确的;
我觉得这里编译器应该帮我们做到;
比如G++就做到了, 可是VC6,7没有, 偏偏又是最常用的;
delete[] p;//这里8
这里会到用调用自定义的
void operator delete[](void *p, size_t size)
可惜size是不正确的;
#8
没人有好的方案, 哎, 明天解贴
#9
???怎么几百个错误,什么程序啊.........
#10
size_t是什么东西
#11
你用C++为什么不用new和delete呢?
还有你用G++可以正确的做不是你的程序的原因,g++中你可以
char * p = new char[1024];
而只需要delete p就全释放掉了
还有你用G++可以正确的做不是你的程序的原因,g++中你可以
char * p = new char[1024];
而只需要delete p就全释放掉了
#12
怎么几百个错误,什么程序啊.........?
噢, 我在5个编译器下通过;
别告诉我里没包含头文件, 呵呵;
你用C++为什么不用new和delete呢?
我的目的你不明白, 我实现学作内存池;
避免内存的不停的分配释放的消耗;
这里只是想验证new 和delete的size参数是或一致;
如果一致, 我就不需要编hash保存每个指针对应的内存大小;
内存池的代码就会简化
我的意思没表达清楚, 对不起;
见我的http://blog.csdn.net/wujian53/archive/2004/12/06/206506.aspx
这里有我内存池的简单实现, 目的是学习;
我只是实现当个对象的分配, 对于数组的分配, 由于size的缘故没实现;
噢, 我在5个编译器下通过;
别告诉我里没包含头文件, 呵呵;
你用C++为什么不用new和delete呢?
我的目的你不明白, 我实现学作内存池;
避免内存的不停的分配释放的消耗;
这里只是想验证new 和delete的size参数是或一致;
如果一致, 我就不需要编hash保存每个指针对应的内存大小;
内存池的代码就会简化
我的意思没表达清楚, 对不起;
见我的http://blog.csdn.net/wujian53/archive/2004/12/06/206506.aspx
这里有我内存池的简单实现, 目的是学习;
我只是实现当个对象的分配, 对于数组的分配, 由于size的缘故没实现;
#13
o, 9号散分
#14
new分配的内存地址前面4个字节是存放大小的(debug版本)
#15
9号劫分
#16
new分配的内存地址前面4个字节是存放大小的(debug版本)
这可不行, 不具备移植性;
不过谢谢了;
解贴
这可不行, 不具备移植性;
不过谢谢了;
解贴