标签: malloc

calloc - 将内存清零的有用性

将存储器清零(即calloc()结束malloc())的优点是什么?你不会将价值改为其他东西吗?

c memory malloc memory-management calloc

11
推荐指数
2
解决办法
8225
查看次数

在linux上的c中分配可执行ram

我想在Linux上用c做一个简单的即时编译器.

我如何分配内存,以便我可以写出原始x86代码并执行它作为任何其他功能?

c linux malloc

11
推荐指数
2
解决办法
3710
查看次数

定制malloc用于许多小型固定大小的块?

我需要分配,并释放大量固定大小的小(16字节)内存块,没有固定的顺序.我可以为每个人调用malloc并释放,但这可能效率很低.一个更好的解决方案可能是调用malloc并释放更大的块,并处理这些块本身的分配.

问题是,如何最好地做到这一点?

这似乎不应该是一个非常不寻常的问题或罕见的问题,它应该已经"解决",但我似乎找不到任何东西.有什么指针吗?

为了澄清,我知道内存池库,什么不存在,但这些也需要一个大小参数.如果大小是恒定的,那么可以使用更高效算法的不同选项,这些是否有任何实现?

c malloc

11
推荐指数
2
解决办法
5279
查看次数

如何在C中正确使用strtok,以便没有内存泄漏?

我对在C中的char指针上调用strtok时会发生什么感到有些困惑.我知道它会修改字符串的内容,所以如果我在名为'line'的变量上调用strtok,它的内容将会改变.假设我遵循以下方法:

void function myFunc(char* line) {

    // get a pointer to the original memory block
    char* garbageLine = line;

    // Do some work
    // Call strtok on 'line' multiple times until it returns NULL
    // Do more work

    free(garbageLine);
}
Run Code Online (Sandbox Code Playgroud)

进一步假设'line'在传递给myFunc之前被malloced.我应该在使用strtok之后释放原始字符串还是为我们完成工作?另外,如果'line'没有被malloced并且我尝试使用上面的函数会发生什么?取而代之的是更安全吗?(假设程序员知道该行未被malloced,则不会免费拨打电话)

调用

char* garbageLine = line;
myFunc(line);
free(garbageLine);
Run Code Online (Sandbox Code Playgroud)

功能定义

void function myFunc(char* line) {
    // Do some work
    // Call strtok on 'line' multiple times until it returns NULL
    // Do more work
}
Run Code Online (Sandbox Code Playgroud)

c malloc free strtok

11
推荐指数
2
解决办法
1万
查看次数

malloc()是不可重入的但是线程安全的?

可能重复:
Malloc线程安全吗?

在阅读"Linux编程接口"时,我并不感到困惑.

从书中可以看出,malloc是不可重入的,因为它操纵全局链表数据结构,但是通过使用互斥锁使其成为线程安全的.

我对此有点困惑:因为它使用互斥锁是线程安全的,因此可以同时被多个线程调用,为什么它不是可重入函数?(如果我们说可重入意味着它可以被多个调用者同时调用)

另一个问题是,由于malloc是线程安全的,我们可以把它放在信号处理程序中吗?我认为答案是肯定的,但我不确定,因为根据本书,它说只有一个可重入或异步信号安全的函数可以放在信号处理程序中.

任何人都可以向我解释这个吗?

c linux malloc multithreading reentrancy

11
推荐指数
1
解决办法
6090
查看次数

带有jemalloc的C++ STL

如何使用带有jemalloc(或任何其他malloc实现)的C++ STL容器?

它是否像包含一样简单jemalloc/jemalloc.h?或者我应该为他们写一个分配器?

编辑:我正在处理的应用程序在其生命周期内分配和释放相对较小的对象.我想替换默认的分配器,因为基准测试显示应用程序不会超过2个核心.分析显示它正在等待内存分配,这就是导致扩展问题的原因.据我了解,jemalloc将有助于此.


我希望看到一个解决方案,这是平台中立的,因为应用程序必须在Linux和Windows上运行.(在Linux下,链接不同的实现很容易,但据我所知,在Windows上很难实现.)

c++ malloc memory-management stl

11
推荐指数
3
解决办法
8555
查看次数

在_SUCCESS和_FAILURE上退出()释放分配的内存

这是一段简短的代码片段,exit(3)在发生故障时会有两次调用.这些调用是否释放malloc分配的内存?谷歌搜索曾经说过它,甚至更多次,它没有......

我应该添加free()吗?

另外:哪个更好if (!word)(它也适用于例如.word == 0,这与word == NULL不同,所以我猜它是错的)或者if (word == NULL)

char *word = NULL, *temp = NULL;
    word = (char *)malloc(sizeof(char) * size);

    if (!word) {            /* or maybe rather it should be (word == NULL)  */
        perror("malloc fail");
        if (fclose(fp)) {
            perror("fclose fail");
            exit(3);                            /* exit without free ? */
        }
        exit(3);                                /* exit without free ? */
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

c malloc free exit

11
推荐指数
2
解决办法
6950
查看次数

malloc()和sbrk()如何在unix中运行?

我是新来的UNIX,并且我学习了一些UNIX系统调用,如brk(),sbrk()等....

最后一天我读到了关于malloc()功能的内容,我感到很困惑!任何人都可以告诉我为什么malloc减少sbrk()了程序必须执行的系统调用次数?

另一个问题,做brk(0),sbrk(0)malloc(0)返回相同的价值?

unix malloc

11
推荐指数
2
解决办法
2万
查看次数

有没有理由不使用calloc而不是malloc?

calloc()几天我刚刚了解了C 功能.看了它的描述和它有什么不同malloc(1,2),我的想法是,作为非嵌入式程序员,我应该总是使用calloc().但情况确实如此吗?

我有一个保留是访问calloc()-ed内存的额外延迟,但我也想知道是否有时候切换malloc()calloc()将以更严重的方式破坏程序.

PS零初始化方面calloc()对我来说非常清楚.我有兴趣了解的是calloc()malloc()- 懒惰内存分配之间的另一个区别calloc().如果您要专注于内存初始化方面,请不要发布答案.

c c++ malloc calloc dynamic-allocation

11
推荐指数
2
解决办法
1939
查看次数

使用malloc的C中的错误:corrupted size vs prev_size

我找到了python的答案,但我不明白.

代码是修改后的合并排序.对于我检查到的少量输入,它工作得很好.但是当我通过在线判断运行时,当输入数量很高(500)时,它给了我这个错误:

Error in 'a.out': corrupted size vs. prev_size: 0x0000000000d5b8b0
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f3b83a5b7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x80dfb)[0x7f3b83a64dfb]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f3b83a6853c]
a.out[0x4009d1]
a.out[0x400ac7]
a.out[0x400a87]
a.out[0x400aa4]
a.out[0x400a87]
a.out[0x400bc7]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f3b83a04830]
a.out[0x4005b9]
======= Memory map: ========
Run Code Online (Sandbox Code Playgroud)

它还有15行.为什么我收到此错误?是因为我在使用动态分配内存时遇到的一些错误malloc

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void *Merge(int *A,int l,int m,int r,int *B,int *F);
void *Merge(int *A,int l,int m,int r,int *B,int *F){
  int i=l,j=m,k=0,*C,x,y=l,z,cSize,temp,*D,*E;

  cSize = r-l;
  C = (int *) malloc (cSize * sizeof(int));
  D = (int *) malloc (cSize * sizeof(int));
  E = (int *) malloc (cSize * …
Run Code Online (Sandbox Code Playgroud)

c malloc

11
推荐指数
1
解决办法
3万
查看次数