我分配了一个大小为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。它们允许并行执行对数据向量的操作。
答案 0 :(得分:1)
在一条指令中无法做到这一点。没有这样的汇编程序指令,所以你必须循环。如果你用纯asm编写循环,它可以非常小而且快。 但任何体面的编译器都应该有优化开关,通常效果很好。
答案 1 :(得分:1)
Memset也是一个循环,你知道。这里没有魔力。
编写良好的C应该编译和优化,并不比手写汇编程序慢得多。
int i=length_of_array;
while(--i>=0)
samples[i]+=offset;