相关疑难解决方法(0)

为什么malloc + memset比calloc慢?

众所周知,它与初始化分配的内存calloc不同malloc.使用时calloc,内存设置为零.使用时malloc,内存不会被清除.

所以在日常工作中,我认为callocmalloc+ memset.顺便说一下,为了好玩,我为基准编写了以下代码.

结果令人困惑.

代码1:

#include<stdio.h>
#include<stdlib.h>
#define BLOCK_SIZE 1024*1024*256
int main()
{
        int i=0;
        char *buf[10];
        while(i<10)
        {
                buf[i] = (char*)calloc(1,BLOCK_SIZE);
                i++;
        }
}
Run Code Online (Sandbox Code Playgroud)

代码1的输出:

time ./a.out  
**real 0m0.287s**  
user 0m0.095s  
sys 0m0.192s  
Run Code Online (Sandbox Code Playgroud)

代码2:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLOCK_SIZE 1024*1024*256
int main()
{
        int i=0;
        char *buf[10];
        while(i<10)
        {
                buf[i] = (char*)malloc(BLOCK_SIZE);
                memset(buf[i],'\0',BLOCK_SIZE);
                i++;
        }
}
Run Code Online (Sandbox Code Playgroud)

代码2的输出:

time ./a.out   
**real 0m2.693s**  
user 0m0.973s  
sys 0m1.721s  
Run Code Online (Sandbox Code Playgroud)

更换 …

c malloc

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

为什么numpy.zeros占用的空间很小

我想知道为什么numpy.zeros占用这么小的空间?

x = numpy.zeros(200000000)
Run Code Online (Sandbox Code Playgroud)

这不占用任何记忆,

x = numpy.repeat(0,200000000)
Run Code Online (Sandbox Code Playgroud)

占用约1.5GB.numpy.zeros会创建一个空指针数组吗?如果是这样,有没有办法在cython中更改它后将指针设置为空?如果我使用:

x = numpy.zeros(200000000)
x[0:200000000] = 0.0
Run Code Online (Sandbox Code Playgroud)

内存使用率上升.有没有办法改变一个值,然后将其改回原来在python或cython中使用的格式numpy.zeros?

python arrays numpy cython

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

python tracemalloc 模块分配统计何时与 ps 或 pmap 中显示的不匹配?

我正在尝试追踪内存泄漏,所以我已经完成了

import tracemalloc
tracemalloc.start()

<function call>

# copy pasted this from documentation
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')

print("[ Top 10 ]")
for stat in top_stats[:10]:
    print(stat)
Run Code Online (Sandbox Code Playgroud)

这显示没有主要分配,所有内存分配都非常小,而我看到在psand 中分配了 8+ GB 内存pmap(在运行命令之前和之后以及运行垃圾收集之后进行检查)。此外,tracemalloc.get_traced_memory确认tracemalloc没有看到很多分配。pympler也没有看到分配。

有谁知道什么时候会出现这种情况?某些模块正在使用 cython,这会导致 tracemalloc 出现问题吗?

在 pmap 中,分配看起来像:

0000000002183000 6492008 6491876 6491876 rw--- [ anon ]

python memory-management cython

6
推荐指数
2
解决办法
3157
查看次数

标签 统计

cython ×2

python ×2

arrays ×1

c ×1

malloc ×1

memory-management ×1

numpy ×1