我知道这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) 我需要使用 SSE(首选 SSE2)进行简单的 ZeroMemory 实现有人可以帮忙吗?我正在通过 SO 和网络进行搜索,但没有找到直接答案。