小编use*_*927的帖子

malloc和gcc优化2

while(count < 30000000){
    malloc(24);
    count++;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在我用gcc -O0编译的计算机上运行大约170毫秒.但是,使用-Ox进行编译,其中x> 0,优化器巧妙地指出所请求的内存永远不会被使用,因此它被排除在优化的可执行文件之外.它是如何做到的?

c malloc optimization gcc

5
推荐指数
1
解决办法
899
查看次数

C优化 - 低级代码

我正在尝试编写一个与dlmalloc相当的内存分配器,它是glibc中使用的malloc.dlmalloc是一个具有块拆分的最佳匹配器,它在将块再次合并为大块之前保留了最近使用的块池.我正在写的分配器首先适合它.

我的问题有两个:(1)我的代码的测试时间与glibc malloc相比是非常不规则的;(2)有些日子我的代码的平均运行时间将是3到4倍; (2)并不是什么大问题,但我想理解为什么glibc malloc不会以同样的方式受到影响.此帖还显示了malloc和我的代码之间(1)中描述的行为示例.有时,一批1000次测试的平均时间远远高于malloc的时间(上面的问题(2)),有时平均值是相同的.但是,对我的代码进行一批测试的测试时间总是非常不规则(上面的问题(1)); 意味着在一批测试中有时间跳跃到平均值的20倍,并且这些跳跃散布在其他常规(接近平均)时间内.glibc malloc不这样做.

我正在编写的代码如下.

===================================

/* represent an allocated/unallocated  block of memory */
struct Block {

    /* previous allocated or unallocated block needed for consolidation but not used in allocation */
    Block* prev;
    /* 1 if allocated and 0 if not */
    unsigned int tagh;
   /* previous unallocated block */
   Block* prev_free;
   /* next unallocated block  */
   Block* next_free;
   /* size of current block */
   unsigned int size;
};

#define CACHE_SZ 120000000

/* array to be …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization memory-management

3
推荐指数
2
解决办法
299
查看次数

标签 统计

c ×2

optimization ×2

c++ ×1

gcc ×1

malloc ×1

memory-management ×1