Tag: malloc

第一个“C”在“calloc”中代表什么?

一个学生问这个问题,我不知道。 猜测包括:“计数”,“清除”,“分块”,“完整”,… 标准库文档没有说明它的含义,也没有类似的命名函数来指示模式。 有谁知道实际的词源,也许有一个权威的参考来支持它?

malloc&放置新的与新的

过去几天我一直在研究这个问题,到目前为止,除了教条式的论据或对传统的诉求之外,我还没有真正发现任何有说服力的东西(即“这是C ++的方式!” )。 如果我正在创build一个对象数组,那么使用什么是令人信服的理由(除了缓解): #define MY_ARRAY_SIZE 10 // … my_object * my_array=new my_object [MY_ARRAY_SIZE]; for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i]=my_object(i); 过度 #define MEMORY_ERROR -1 #define MY_ARRAY_SIZE 10 // … my_object * my_array=(my_object *)malloc(sizeof(my_object)*MY_ARRAY_SIZE); if (my_object==NULL) throw MEMORY_ERROR; for (int i=0;i<MY_ARRAY_SIZE;++i) new (my_array+i) my_object (i); 据我所知,后者比前者更有效率(因为你不会不必要地将内存初始化为一些非随机值/调用默认构造函数),唯一的区别就是你用: delete [] my_array; 另一个你清理: for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i].~T(); free(my_array); 我出于一个令人信服的理由。 诉诸C ++(而不是C)的事实,因此不应该使用malloc和free […]

零大小的malloc

很简单的问题,我做了以下程序: #include <stdlib.h> int main(int argc, char ** argv) { void * ptr; ptr = malloc(0); free(ptr); } 而且它不会在我的机器上发生段错误。 这是一个stdlib malloc和免费的便携式行为,还是我寻找麻烦? 编辑:似乎不可移植的是由malloc返回的值。 问题是关于malloc(0)+自由组合,而不是ptr的值。

jemalloc如何工作? 有什么好处?

Firefox 3带有一个新的分配器: jemalloc 。 我在几个地方听说这个新的分配器更好。 Google的最佳search结果并没有提供任何进一步的信息,我对它的工作原理感兴趣。

为什么memcpy()的速度每4KB急剧下降?

我testing了memcpy()的速度,注意到速度在i * 4KB下急剧下降。 结果如下:Y轴是速度(MB /秒),X轴是memcpy()的缓冲区大小,从1KB增加到2MB。 图2和图3详细描述了1KB-150KB和1KB-32KB的部分。 环境: CPU:Intel(R)Xeon(R)CPU E5620 @ 2.40GHz OS:2.6.35-22-generic#33-Ubuntu GCC编译器标志:-O3 -msse4 -DINTEL_SSE4 -Wall -std = c99 我想它必须与高速caching相关,但是我无法从以下高速caching不友好的情况中find原因: 为什么我的程序在循环8192个元素时变慢? 为什么转置512×512的matrix要比转置513×513的matrix慢得多? 由于这两种情况的性能下降是由不友好的循环引起的,这些循环将零散的字节读入高速caching,浪费了高速caching行的剩余空间。 这是我的代码: void memcpy_speed(unsigned long buf_size, unsigned long iters){ struct timeval start, end; unsigned char * pbuff_1; unsigned char * pbuff_2; pbuff_1 = malloc(buf_size); pbuff_2 = malloc(buf_size); gettimeofday(&start, NULL); for(int i = 0; […]

分配内存的权力是两个更好吗?

当我们使用malloc()来分配内存的时候,我们应该给出两个幂的大小吗? 或者我们只是给出我们需要的确切大小? 喜欢 //char *ptr= malloc( 200 ); char *ptr= malloc( 256 );//instead of 200 we use 256 如果给两个大小的大小比较好,那是什么原因呢? 为什么更好? 谢谢 编辑 我的困惑的原因是从乔尔的博客回到基础引用 聪明的程序员通过总是分配大小为2的内存块来最小化malloc的潜在破坏。 你知道,4字节,8字节,16字节,18446744073709551616字节等等。对于任何使用乐高的人来说,这应该是直观的,这样可以最大限度地减less自由链中奇怪的碎片数量。 虽然这看起来像是浪费空间,但也很容易看出它从来不会浪费掉超过50%的空间。 所以你的程序使用的内存不会超过它所需要的两倍,这并不是什么大不了的事情。 对不起,我应该早些发布上面的报价。 我很抱歉! 到目前为止,大多数回复都表示,用两个幂来分配内存是一个坏主意,那么在哪种情况下,最好遵循Joel关于malloc()的观点? 他为什么这么说? 以上引用的build议是否已经过时了? 请解释一下。 谢谢

内存分配/释放瓶颈?

在典型的真实世界的程序中,内存分配/释放有多less瓶颈? 来自任何types的性能通常很重要的程序的答案是受欢迎的。 malloc / free / garbage collection的体面实现是否足够快,以至于它只是在几个极端情况下的一个瓶颈,或者大多数性能关键型软件会从试图保持内存分配量下降或拥有更快的malloc / free /垃圾回收的实现? 注意:我不是在这里谈论实时的东西。 对性能至关重要,我的意思是吞吐量很重要,但延迟并不一定。 编辑:虽然我提到malloc,这个问题并不打算是特定于C / C ++。

使用malloc时无效从`void *'转换为`char *'?

我遇到了第5行的错误,下面的代码有问题: 错误:无效转换从void*到char* 我使用g ++与codeblocks,我试图编译这个文件作为cpp文件。 有关系吗? #include <openssl/crypto.h> int main() { char *foo = malloc(1); if (!foo) { printf("malloc()"); exit(1); } OPENSSL_cleanse(foo, 1); printf("cleaned one byte\n"); OPENSSL_cleanse(foo, 0); printf("cleaned zero bytes\n"); }

你可以分配一个非常大的内存单元(> 4GB)在C或C + +?

现在有了大量内存,我想知道,有可能分配一个大于4GB的内存块吗? 或者我需要分配一堆小块,并处理它们之间的切换? 为什么??? 我正在处理一些openstreetmap XML数据,这些文件是巨大的。 我目前正在将它们stream入,因为我无法将它们全部加载到一个块中,但我只是对malloc或new的上限感到好奇。

malloc()与HeapAlloc()

malloc()和HeapAlloc()有什么区别? 据我所知malloc从堆分配内存,就像HeapAlloc,对不对? 那么区别是什么呢? 谢谢!