相关疑难解决方法(0)

零内存的速度比使用memset更快?

我知道这memset(ptr, 0, nbytes)很快,但有更快的方法(至少在x86上)?

我假设memset使用mov,但是当大多数编译器将内存归零时,xor因为它更快,更正确吗?edit1:错了,因为GregS指出只适用于寄存器.我在想什么?

另外我问一个比我更熟悉汇编程序的人看看stdlib,他告诉我x86 memset没有充分利用32位宽的寄存器.然而当时我很累,所以我不太确定我是否理解正确.

edit2:我重新审视了这个问题并进行了一些测试.这是我测试的:

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <sys/time.h>

    #define TIME(body) do {                                                     \
        struct timeval t1, t2; double elapsed;                                  \
        gettimeofday(&t1, NULL);                                                \
        body                                                                    \
        gettimeofday(&t2, NULL);                                                \
        elapsed = (t2.tv_sec - t1.tv_sec) * 1000.0 + (t2.tv_usec - t1.tv_usec) / 1000.0; \
        printf("%s\n --- %f ---\n", #body, elapsed); } while(0)                 \


    #define SIZE 0x1000000

    void zero_1(void* buff, size_t size)
    {
        size_t i;
        char* foo …
Run Code Online (Sandbox Code Playgroud)

c std

58
推荐指数
6
解决办法
10万
查看次数

在c/c ++中初始化和清零数组的区别?

在c(或c ++)中,有什么区别

char myarr[16]={0x00};


char myarr[16];
memset(myarr, '\0', sizeof(myarr));

??

编辑:我问这个是因为在vc ++ 2005中结果是一样的..
编辑更多:和

char myarr[16]={0x00,}; 

也许可以得到更全面的答案,而不是含糊不清,因为下面的一些答案是指这种代码,即.在关闭花括号之前放入逗号.vc ++ 2005中的结果也是一样的.

c c++ arrays

16
推荐指数
3
解决办法
7838
查看次数

当被问到时,C在运行时初始化并重新初始化数组为零

#include <stdio.h>

int main(void) {
    for (int i = 0; i < 5; i++) {
        int arr[5] = {0};
        // arr gets zeroed at runtime, and on every loop iteration!
        printf("%d %d %d %d %d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);
        // overwrite arr with non-zero crap!
        arr[0] = 3;
        arr[1] = 5;
        arr[2] = 2;
        arr[3] = 4;
        arr[4] = 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显然这有用:

> gcc -Wall -Wextra -pedantic -std=c99 -o test test.c;./test
0 0 0 0 0 …
Run Code Online (Sandbox Code Playgroud)

c arrays loops runtime initialization

0
推荐指数
1
解决办法
1174
查看次数

标签 统计

c ×3

arrays ×2

c++ ×1

initialization ×1

loops ×1

runtime ×1

std ×1