我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.
如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.
我想开发一个多线程C++应用程序(最终大部分C++代码将由应用程序本身生成,可以被视为高级域特定语言)在Linux/AMD64/Debian上使用GCC 4.6(和可能是最新的C++ 11标准).
我真的想在我的所有堆分配中使用Boehm的保守垃圾收集器,因为我想分配new(GC)并且从不打扰delete.我假设Boehm的GC工作得很好.
使用(而不是C)C++的主要动机是在所有的算法和集合std::map... std::vector由C++标准库提供.
Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc/gc_allocator.h中).
我应该重新定义operator ::new为Boehm吗?
或者我应该使用所有集合模板,并将显式的allocator模板参数设置为某些gc_allocator?我不完全理解第二个模板参数(分配器)对std :: vector的作用?它是用来分配矢量内部数据,还是分配每个单独的元素?
什么是std::string-s?如何使他们的数据GC分配?我应该使用basic_string模板gc_allocator吗?有没有办法让内部数组的char分配GC_malloc_atomic不GC_malloc?
或者您是否建议不要将Boehm GC与g ++编译的应用程序一起使用?
问候.
我有多线程部分,线程需要分配几个大的数据段,比如每个大约100MB,用作缓冲区.此外,缓冲区可能需要在运行时调整几次.
自然的解决方案是使用,realloc但它可能会移动不需要的内存. free/malloc配对调整大小缓冲区恐怕可能导致碎片并保留内存然后创建其他问题.
我可以使用什么来分配/重新分配内存?
我有一个算法,需要在函数内构建 NxN 矩阵,该函数将返回该矩阵与同样动态构建的 Nx1 向量的乘积。(N 通常为 8 或 9,但对于大于该值的值必须进行概括)。
我正在使用 Eigen 库来执行更复杂的代数运算(最小二乘和其他几个约束问题),因此不能选择切换它。
我对这些函数进行了基准测试,由于密集的内存分配,存在巨大的瓶颈。我的目标是构建一个线程安全的应用程序,因此,在某些情况下,我将这些矩阵和向量替换为对全局向量中元素的引用,该全局向量充当无法存储在堆栈上的对象的提供者。这避免了调用特征矩阵和向量的构造函数/析构函数,但这不是一个优雅的解决方案,如果不小心的话,可能会导致巨大的问题。
因此,Eigen 是否提供了一种解决方法,因为我没有看到将分配器作为这些对象的模板参数传递的选项,或者是否有更明显的事情要做?
c++ ×3
c ×1
eigen ×1
g++ ×1
linux ×1
malloc ×1
matrix ×1
memory ×1
new-operator ×1
optimization ×1
performance ×1