草庐IT

data_free

全部标签

c - 如果 free() 知道我的数组的长度,为什么我不能在我自己的代码中要求它?

我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:voidinitializeAndFree(int*anArray,size_tlength);intmain(){size_tarrayLength=0;scanf("%d",&arrayLength);int*myArray=(int*)malloc(sizeof(int)*arrayLength);initializeAndFree(myArray,arrayLength);}voidinitializeAndFree(int*anArray,size_tlength){inti=0;for(i=0;i但是,如果我

c - 如果 free() 知道我的数组的长度,为什么我不能在我自己的代码中要求它?

我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:voidinitializeAndFree(int*anArray,size_tlength);intmain(){size_tarrayLength=0;scanf("%d",&arrayLength);int*myArray=(int*)malloc(sizeof(int)*arrayLength);initializeAndFree(myArray,arrayLength);}voidinitializeAndFree(int*anArray,size_tlength){inti=0;for(i=0;i但是,如果我

r - 以节省内存的方式增长 data.frame

根据CreatinganRdataframerow-by-row,使用rbind附加到data.frame并不理想,因为它每次都会创建整个data.frame的副本。如何在R中累积数据,从而生成data.frame而不会产生这种惩罚?中间格式不需要是data.frame。 最佳答案 第一种方法我尝试访问预先分配的data.frame的每个元素:res但是tracemem变得疯狂(例如data.frame每次都被复制到一个新地址)。替代方法(也不起作用)一种方法(不确定它是否更快,因为我还没有进行基准测试)是创建一个data.fram

r - 以节省内存的方式增长 data.frame

根据CreatinganRdataframerow-by-row,使用rbind附加到data.frame并不理想,因为它每次都会创建整个data.frame的副本。如何在R中累积数据,从而生成data.frame而不会产生这种惩罚?中间格式不需要是data.frame。 最佳答案 第一种方法我尝试访问预先分配的data.frame的每个元素:res但是tracemem变得疯狂(例如data.frame每次都被复制到一个新地址)。替代方法(也不起作用)一种方法(不确定它是否更快,因为我还没有进行基准测试)是创建一个data.fram

c++ - 编译器会优化 malloc/free 或 new/delete 对到 alloca

有没有成熟的C/C++编译器,能够优化malloc/free(或者new/delete)对信息alloca?换句话说,从基于堆的内存转换为基于堆栈的内存(仅适用于某些有限的情况)。只有当两个函数在同一个函数中(甚至在同一block{}中)时,才允许对malloc/free进行这种优化,并且每次malloc时都会调用free叫做。另外,让我们考虑一下指向malloced内存的指针没有保存在某个全局变量中。那么,GCC/LLVM+clang/Intel编译器是否会转换这样的代码块:{char*carray;carray=malloc(100);//ormalloc(N)//somestri

c++ - 编译器会优化 malloc/free 或 new/delete 对到 alloca

有没有成熟的C/C++编译器,能够优化malloc/free(或者new/delete)对信息alloca?换句话说,从基于堆的内存转换为基于堆栈的内存(仅适用于某些有限的情况)。只有当两个函数在同一个函数中(甚至在同一block{}中)时,才允许对malloc/free进行这种优化,并且每次malloc时都会调用free叫做。另外,让我们考虑一下指向malloced内存的指针没有保存在某个全局变量中。那么,GCC/LLVM+clang/Intel编译器是否会转换这样的代码块:{char*carray;carray=malloc(100);//ormalloc(N)//somestri

c++ - malloc 和 free 是如何实现的?

我想实现自己的动态内存管理系统,以便添加有助于在C++中管理内存的新功能。我使用Windows(XP)和Linux(Ubuntu)。实现“malloc”和“free”等功能需要什么?我认为我必须使用最低级别的系统调用。对于Windows,我找到了函数:GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy和HeapFree。对于Linux,我没有发现任何用于堆管理的系统调用。在Linux上,malloc和free是系统调用,不是吗?谢谢编辑:C++不提供垃圾收集器,垃圾收集器很慢。有些分配很容易释放,但有些分配需要垃圾收集器。我想实现这些功能并添

c++ - malloc 和 free 是如何实现的?

我想实现自己的动态内存管理系统,以便添加有助于在C++中管理内存的新功能。我使用Windows(XP)和Linux(Ubuntu)。实现“malloc”和“free”等功能需要什么?我认为我必须使用最低级别的系统调用。对于Windows,我找到了函数:GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy和HeapFree。对于Linux,我没有发现任何用于堆管理的系统调用。在Linux上,malloc和free是系统调用,不是吗?谢谢编辑:C++不提供垃圾收集器,垃圾收集器很慢。有些分配很容易释放,但有些分配需要垃圾收集器。我想实现这些功能并添

c++ - 什么可以解释调用 free() 时的堆损坏?

我已经调试了几天的崩溃,它发生在OpenSSL的深处(与维护者讨论here)。我花了一些时间进行调查,所以我会尝试让这个问题变得有趣且内容丰富。首先,给出一些上下文,我重现崩溃的最小样本如下:#include#include#include#include#include#includeintmain(){ERR_load_crypto_strings();OpenSSL_add_all_algorithms();ENGINE_load_builtin_engines();EC_GROUP*group=EC_GROUP_new_by_curve_name(NID_sect571k1);

c++ - 什么可以解释调用 free() 时的堆损坏?

我已经调试了几天的崩溃,它发生在OpenSSL的深处(与维护者讨论here)。我花了一些时间进行调查,所以我会尝试让这个问题变得有趣且内容丰富。首先,给出一些上下文,我重现崩溃的最小样本如下:#include#include#include#include#include#includeintmain(){ERR_load_crypto_strings();OpenSSL_add_all_algorithms();ENGINE_load_builtin_engines();EC_GROUP*group=EC_GROUP_new_by_curve_name(NID_sect571k1);