46得票3回答
为什么使用_mm_malloc?(而不是_aligned_malloc,alligned_alloc或posix_memalign)

有几种方法可以获取对齐的内存块,但它们非常相似,问题主要取决于您所针对的语言标准和平台。 C11 void * aligned_alloc (size_t alignment, size_t size) POSIX int posix_memalign (void **memptr,...

43得票7回答
为什么通过基类指针删除数组时,派生类的(虚)析构函数没有被调用?

我有一个带有虚析构函数的Animal类,以及一个派生类Cat。 #include <iostream> struct Animal { Animal() { std::cout << "Animal constructor" << std::en...

42得票11回答
C++中高效的链表实现?

这份文档称std::list效率低下: std::list是一个极其低效的类,很少有用。每插入一个元素都会执行一个堆分配,因此具有极高的常数因子,尤其对于小数据类型。 评论:令我惊讶的是,尽管在元素构造方面效率低下,std::list支持O(1)时间复杂度的插入/删除,因为它是一个...

39得票4回答
如何在Linux下使用汇编语言和系统调用动态分配内存

我正在寻找一些使用Linux下的汇编语言和系统调用进行动态内存分配的良好代码示例,而不是使用malloc等函数。 有哪些最简单但有效的方法可以做到这一点? 在Intel 386+计算机上。

36得票3回答
在C语言中,为什么或者何时需要动态分配内存?

动态内存分配是C编程中非常重要的主题。然而,我一直找不到一个很好的解释,说明这使我们能做什么,或者为什么这是必需的。 我们不能只声明变量和结构体而永远不使用malloc()吗? 另外,下面两种方式有什么区别:ptr_one = (int *)malloc(sizeof(int)); 并且i...

34得票7回答
不使用动态内存分配的Pimpl惯用语

我们希望在项目的某些部分使用pimpl模式。这些部分也恰好是禁止动态内存分配的部分,而这个决策不在我们的控制范围之内。 所以我的问题是,有没有一种干净而漂亮的实现pimpl模式的方法,而不需要动态内存分配? 编辑 以下是其他限制:嵌入式平台、标准C++98、无外部库、无模板。

32得票3回答
在分配内存的同时,malloc是否会预留更多的空间?

我在测试程序中观察到以下行为: 我使用malloc()分配了1 MB的内存,然后在sleep(10)后使用free()释放它。我这样做了五次。当程序运行时,我会观察top中的内存占用情况。 一旦使用free()释放,我期望程序的虚拟内存(VIRT)消耗减少1 MB。但实际上并没有。它保持稳...

30得票4回答
当我对一个指针进行递增操作并且删除它时,为什么我的程序会崩溃?

在我解决一些编程练习时,我意识到我对指针有一个大误解。请问有人能解释一下为什么这段代码会导致C++崩溃吗?#include <iostream> int main() { int* someInts = new int[5]; someInts[0] = 1; ...

29得票2回答
堆上内存分配的 new 运算符

我在查看 new 操作符的签名。它是:void* operator new (std::size_t size) throw (std::bad_alloc); 但是当我们使用这个运算符时,我们从来没有用过强制类型转换。也就是说 int *arr = new int; 那么,在这种情况下C++...

28得票6回答
realloc()的正确使用方法

根据realloc函数的说明:realloc()函数会返回一个指向新分配内存的指针,该内存适合于任何类型的变量,并且可能与ptr不同,如果请求失败,则返回NULL。 因此,在这段代码片段中:ptr = (int *) malloc(sizeof(int)); ptr1 = (int *) r...