草庐IT

C++内存分配机制性能对比(tcmalloc vs. jemalloc)

我有一个分配大量内存的应用程序,我正在考虑使用比malloc更好的内存分配机制。我的主要选择是:jemalloc和tcmalloc。使用其中任何一个有什么好处吗?http://locklessinc.com/benchmarks.shtml中有一些机制(包括作者的专有机制--lockless)之间有很好的对比。它提到了它们各自的一些优点和缺点。鉴于这两种机制都很活跃并不断改进。有没有人对这两者的相对表现有任何见解或经验? 最佳答案 如果我没记错的话,主要区别在于多线程项目。两个库都试图通过让线程从不同的缓存中挑选内存来消除内存争用,

C++内存分配机制性能对比(tcmalloc vs. jemalloc)

我有一个分配大量内存的应用程序,我正在考虑使用比malloc更好的内存分配机制。我的主要选择是:jemalloc和tcmalloc。使用其中任何一个有什么好处吗?http://locklessinc.com/benchmarks.shtml中有一些机制(包括作者的专有机制--lockless)之间有很好的对比。它提到了它们各自的一些优点和缺点。鉴于这两种机制都很活跃并不断改进。有没有人对这两者的相对表现有任何见解或经验? 最佳答案 如果我没记错的话,主要区别在于多线程项目。两个库都试图通过让线程从不同的缓存中挑选内存来消除内存争用,

c++ - 使用堆内存(malloc/new)会创建一个不确定的程序吗?

几个月前,我开始使用C语言为空间应用程序开发实时系统软件,也为使用C++的微Controller开发软件。在这样的系统中有一条经验法则是永远不应该创建堆对象(所以没有malloc/new),因为它使程序非确定性。当人们告诉我时,我无法验证这句话的正确性。那么,这是一个正确的说法吗?让我感到困惑的是,据我所知,确定性意味着运行一个程序两次将导致完全相同的执行路径。据我了解,这是多线程系统的一个问题,因为多次运行同一个程序可能每次都有不同的线程以不同的顺序运行。 最佳答案 在实时系统的上下文中,确定性不仅仅是可重复的“执行路径”。另一个

c++ - Malloc vs new——不同的填充

我正在为我们的项目审查其他人的C++代码,该项目使用MPI进行高性能计算(10^5-10^6核)。该代码旨在允许(可能)不同架构上的不同机器之间进行通信。他写了一条评论,内容大致如下:We'dnormallyusenewanddelete,buthereI'musingmallocandfree.Thisisnecessarybecausesomecompilerswillpadthedatadifferentlywhennewisused,leadingtoerrorsintransferringdatabetweendifferentplatforms.Thisdoesn'thap

c - 在 Objective-C/iPhone 应用程序中使用 "classic"malloc()/free() 可以吗?

我玩iPhone开发已经有一段时间了,虽然当你是一个“硬核”.NET开发人员时感觉有点尴尬,但一旦你习惯了它并没有那么糟糕。在我读过的关于Objective-C的每一本书中,都只讨论了用于内存管理的retain/release(引用计数)。作为一个老派的C/C++开发人员,使用malloc()和free()的“正常”方式分配似乎很奇怪,仅在一些脚注中提及。我知道malloc()和free()在Objective-C中工作,但我很好奇这是否是常见做法。毕竟,如果我想分配一个100个整数的数组,似乎这是最有效的方法:int*array=malloc(sizeof(int)*100);mem

iphone - 如何找到 malloc "double free"错误的原因?

我正在用Objective-C编写一个应用程序,但我收到了这个错误:MyApp(2121,0xb0185000)malloc:***errorforobject0x1068310:doublefree***setabreakpointinmalloc_error_breaktodebug当我释放NSAutoreleasePool时会发生这种情况,但我无法确定我要释放两次的对象。如何设置他的断点?有没有办法知道这个“对象0x1068310”是什么? 最佳答案 当一个对象被“双重释放”时,最常见的原因是您(不必要地)释放了一个自动释放的

c++ - 在多线程 C/C++ 中,malloc/new 在分配内存时是否锁定堆

我很好奇如果两个线程同时请求分配内存是否存在内存分配锁。我正在使用OpenMP执行多线程、C++代码。操作系统:主要是linux,但也想了解Windows和Mac。 最佳答案 在某些实现中可能会有改进,例如创建特定于线程的缓存(在这种情况下,小块的分配将是无锁的)。例如,this来自谷歌。但总的来说,是的,内存分配是有锁的。 关于c++-在多线程C/C++中,malloc/new在分配内存时是否锁定堆,我们在StackOverflow上找到一个类似的问题: h

c++ - 在多线程 C/C++ 中,malloc/new 在分配内存时是否锁定堆

我很好奇如果两个线程同时请求分配内存是否存在内存分配锁。我正在使用OpenMP执行多线程、C++代码。操作系统:主要是linux,但也想了解Windows和Mac。 最佳答案 在某些实现中可能会有改进,例如创建特定于线程的缓存(在这种情况下,小块的分配将是无锁的)。例如,this来自谷歌。但总的来说,是的,内存分配是有锁的。 关于c++-在多线程C/C++中,malloc/new在分配内存时是否锁定堆,我们在StackOverflow上找到一个类似的问题: h

c++ - Malloc vs New for Primitives

我了解在C++中对malloc使用new的好处。但是对于原始数据类型(非数组)-int、float等特定情况,使用malloc是否比使用更快>新?虽然,如果我们要分配一个数组以便我们可以使用delete[],那么即使对于基元,也总是建议使用new。但是对于非数组分配,我认为int不会有任何构造函数调用?因为,new运算符分配内存,检查它是否已分配,然后调用构造函数。但是仅对于原始非数组堆分配,使用malloc是否比new更好?请指教。 最佳答案 切勿使用malloc在C++中。切勿使用new除非您正在实现低级内存管理原语。建议是:问

c++ - Malloc vs New for Primitives

我了解在C++中对malloc使用new的好处。但是对于原始数据类型(非数组)-int、float等特定情况,使用malloc是否比使用更快>新?虽然,如果我们要分配一个数组以便我们可以使用delete[],那么即使对于基元,也总是建议使用new。但是对于非数组分配,我认为int不会有任何构造函数调用?因为,new运算符分配内存,检查它是否已分配,然后调用构造函数。但是仅对于原始非数组堆分配,使用malloc是否比new更好?请指教。 最佳答案 切勿使用malloc在C++中。切勿使用new除非您正在实现低级内存管理原语。建议是:问