Articles of malloc

尽可能find最大的内存分配

在32位模式下,应用程序可以访问2GB的虚拟地址空间。 你如何找出你可以分配给这个虚拟地址空间的最大内存大小,没有malloc或新的失败? 例如,假设你想占用整个2GB的虚拟地址空间,但是你只是在2GB的地址空间中间分配了2MB的数据。 是否有一个Windows API调用,你可以找出你可以分配的最大并发地址空间? 所以,当你调用malloc或新的电话不会失败? 感谢您的时间。

试用C – 为什么我不能分配和使用2GB的内存?

我继续尝试与C.我有这个程序,可以让你决定多lessRAM你想吃。 char * eatRAM() { unsigned long long toEat; unsigned long long i = 0; float input; char * pMemory = NULL; int megaByte = 1048576; puts("How much RAM do you want to eat? (in Mega Bytes)"); puts("NOTE: If you want to eat more RAM than you have available\nin your system, the program will crash"); […]

内存分配限制在64位系统上的32位应用程序

对于64位系统上的32位应用程序(Windows 2003 SP2 x64,具体而言)是2GB的malloc(虚拟堆,我猜?)的最大限制? 我基本上是试图推动一个程序超出这个没有运气。 所以我想知道这是否适用于Win x64位平台上的所有32位应用程序。 谢谢!

Visual C ++线程安全的free和malloc?

有没有人知道如果免费和malloc线程安全Visual C ++ 2010? 我有一些奇怪的问题,那就是内存被破坏了,而且我觉得这是唯一的可能性。 有谁知道安全是否可以打开和closures,以及如何?

在Linux和Windows上的malloc_size替代

如果给出一个void *指针,如何告诉给定的地址上分配的块的大小(以前使用malloc分配;在Linux和Windows中)是多less? 我希望这两个系统肯定存储这种信息的地方。 也就是OSX / Darwin上存在的malloc_size替代方法。 如果有帮助,使用gcc / mingw。

为什么在分配单个字节时地址不连续?

我dynamic地分配内存如下: char* heap_start1 = (char*) malloc(1); char* heap_start2 = (char*) malloc(1); 当我做printf如下令人惊讶的地址是不连续的。 printf("%p, %p \n",heap_start1,heap_start2); 结果: 0x8246008, 0x8246018 正如你所看到的,有15个字节的额外的内存是残留碎片整理。 这绝对不是因为字alignment。 任何想法背后这个奇特的路线? 提前致谢! 如果有问题,我正在linux中使用gcc。

malloc函数在标准的C和C ++库中插入

我想编写一个共享库,这样就可以将它的内存使用情况从它所链接的应用程序中分离出来。 也就是说,如果共享库,我们称之为libmemory.so ,调用malloc ,我想维护这个内存在一个单独的堆中,用来调用应用程序中malloc调用。 这个问题不是关于编写内存分配器,而是关于链接和加载库和应用程序。 到目前为止,我一直在试验函数插入,符号可见性和链接技巧的组合。 到目前为止,我无法得到这个权利,因为一件事:标准库。 我无法find一种方法来区分在内部使用libmemory.so中发生的malloc与应用程序之间的标准库的调用。 这会导致一个问题,因为libmemory.so标准库用法libmemory.so污染应用程序堆。 我现在的策略是把共享库中malloc定义作为一个隐藏符号来插入。 这很好地工作,所有的库代码如预期的那样工作,当然,除了在运行时dynamic加载的标准库之外。 当然,我一直在试图find一种方法来静态地embedded标准库的用法,以便在编译时使用libmemory.so中插入的malloc 。 我试过-static-libgcc和-static-libstdc++没有成功(无论如何,这似乎是不鼓励)。 这是正确的答案吗? 做什么? Ps,进一步阅读总是赞赏,并帮助问题标签前面会很好。

malloc双重自由行为

malloc的GNU手册页定义,当free()用同一个指针调用两次(以前由malloc()分配)时,会发生“未定义的行为”。 那是什么样的行为? 我在哪里可以find更多有关这种错误的信息?

Linux c应用程序内存使用情况

我有C Linux应用程序,它使用malloc,calloc,realloc和free函数连续分配和释放内存(大约每秒200次alloc / free)。 即使所有分配的内存都被释放(通过包装* alloc和free来validation),VmSize,VmRSS和VmData数字仍然在增加,最终应用程序被OOM杀手所杀。 为什么VmSize,VmRSS和VmData不断增加? 如果是内存pipe理问题,任何指针可以避免这种情况? 我在C中看到了这个问题的使用情况 ,但答案并没有解释OOM行为。

从未定义长度的文件中读取,存储在数组中,分段错误

我想打开一个文件,读取它的内容并使用C代码将其存储在一个数组中。 我做了我的Windows笔记本电脑,它的工作原理,但是当我尝试我的Raspberrypi上的代码我得到分段错误。 我一直在尝试一段时间debugm我很新的C,所以我很难find我做错了什么。 char *readFile(char *fileName) { FILE *ptr_file; char *ptr_data; int n = 0; char c; ptr_file = fopen(fileName, "r"); if(ptr_file == NULL) { perror("File could not be opened.\n"); exit(EXIT_FAILURE); } fseek(ptr_file, 0, SEEK_END); long f_size = ftell(ptr_file); fseek(ptr_file,0, SEEK_SET); ptr_data = (char *)malloc(f_size+1); if(ptr_data == NULL) { perror("MALLOC FAILED"); exit(EXIT_FAILURE); } while((c = […]