增加连续内存分配中存储的值

时间:2014-02-28 22:34:24

标签: c arrays memory

我分配了一个大小为int16_t SIZE的数组,如下所示。

#define SIZE 1152

int16_t *samples = malloc(sizeof(int16_t) * SIZE);

现在我可以将这些值设置为零,如下所示。

memset(samples, 0, sizeof(int16_t) * SIZE);

有没有办法通过单个操作(类似于samples)来增加/减少memset中存储的值一定数量,而不是通过循环来增加/减少每个元素数组?

这是用于Android的C代码处理音频,如果它很重要的话。

更新:我将使用NEON instruction代替ARM。它们允许并行执行对数据向量的操作。

2 个答案:

答案 0 :(得分:1)

在一条指令中无法做到这一点。没有这样的汇编程序指令,所以你必须循环。如果你用纯asm编写循环,它可以非常小而且快。 但任何体面的编译器都应该有优化开关,通常效果很好。

答案 1 :(得分:1)

Memset也是一个循环,你知道。这里没有魔力。

编写良好的C应该编译和优化,并不比手写汇编程序慢得多。

 int i=length_of_array;
 while(--i>=0)
    samples[i]+=offset;