gpt4 book ai didi

c++ - 如果已知 void* 分配大小,如何将确切的内存大小传递给 free()

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:29 27 4
gpt4 key购买 nike

据我所知;在 c++ 和 c 中,delete 运算符或 free() 函数可以从 pionter 数据类型知道分配的内存大小,并且 delete 可以自动调用析构函数.

如果分配的指针是使用一种在其机制中不使用 new 运算符的单例静态动态数组注册的(即仅 malloc)在重载的新指针中。此数组注册 void* 指针并从重载的 new operator

中获取该指针的大小

例。

void * operator new (size_t sz) {
void * m = malloc (sz);
Dynamic_Array::get_instance()->add(m,sz) ; //registering pointer
return m ;
}

所以我的问题是如何使用有关大小的信息来释放我忘记使用此数组的析构函数删除的确切分配内存。

例如

Dynamic_Array::~Dynamic_Array() {
int index = 0;
while(index < storage_size) //storage_size: total number of pointers in array

/* storage is void** array which register
allocated pointers as void* and use classic memset and memcpy to enlarge*/

{
if (storage[index] != NULL) printf("Pointer : %d was not deleted\n", storage[index]);
//how to use delete or free here to delete void* pointer but with known size of memory
index ++;
}
}

谢谢。

最佳答案

As far as I know ; In c++ and c delete operator or free() function can know the size of allocated memory from pionter data type

没有。 delete操作符调用free()函数; free() 函数以某种方式从与指针关联的元数据中知道大小,例如内存前一个字中的长度字。

and delete can call the destructor automatically.

是的。

My question is how to use the information about size to release the exact allocated memory that I forget to delete using the destructor of this array.

你不需要知道。见上文。

关于c++ - 如果已知 void* 分配大小,如何将确切的内存大小传递给 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com