"Заливка" памяти нужным значением - C (СИ)
Формулировка задачи:
Есть некий блок памяти [ ][ ][ ][ ] [ ][ ][ ][ ] [ ][ ][ ][ ]. И есть uint32_t a, равный например 0xAABBCCDD. Каким наиболее быстрым способом можно сделать так:
[AA][BB][CC][DD] [AA][BB][CC][DD] [AA][BB][CC][DD]?
Решение задачи: «"Заливка" памяти нужным значением»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdint.h> #include <memory.h> #include <stdlib.h> #include <time.h> #define VALUE 0xAABBCCDD; void usualmemfill(int size) { char * start = malloc(size * sizeof(uint32_t)); int i; uint32_t value = VALUE; for (i = 0; i < size; i++) { memcpy(start + i * sizeof(uint32_t), &value, sizeof(uint32_t)); } free(start); } void newmemfill(int size) { char * start = malloc(size * sizeof(uint32_t)); uint32_t value = VALUE; asm volatile("cld\n\t" "rep\n\t" "stosl" : /* no output registers */ : "c" (size), "a" (value), "D" (start) /*: "%ecx", "%edi*/ ); free(start); (void)value; } clock_t start; clock_t finish; #define COUNT 100000 int main(void) { int i; printf("Starting usual\n"); start = clock(); for (i = 0; i < COUNT; i++) usualmemfill(i); finish = clock(); printf("Time for usual realisation : %g\n", (float)(finish - start) / CLOCKS_PER_SEC); printf("Starting modified\n"); start = clock(); for (i = 0; i < COUNT; i++) newmemfill(i); finish = clock(); printf("Time for modified realisation : %g\n", (float)(finish - start) / CLOCKS_PER_SEC); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д