Untitled
unknown
c_cpp
3 years ago
1.6 kB
7
Indexable
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <fcntl.h> #include <sys/mman.h> #include <time.h> #include <unistd.h> #include <string.h> #define PHYS_ADDR 0x840000000 static void *page_addr; #define TOTAL_SIZE (1ULL * 1024L * 1024L * 1024L) // 1 GB static void mem_init() { uint64_t pagesize, addr, len; int fd; fd = open("/dev/mem", O_RDWR); if (fd == -1) { perror("Failed to open /dev/mem"); exit(1); } pagesize = getpagesize(); printf("pagesize: %lu\n", pagesize); addr = PHYS_ADDR & (~(pagesize - 1)); printf("addr: 0x%lx\n", addr); len = (PHYS_ADDR & (pagesize - 1)) + TOTAL_SIZE; printf("len: %lu\n", len); page_addr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, addr); if (page_addr == MAP_FAILED) { perror("Failed to mmap plain device path"); exit(1); } close(fd); } int main() { char *mem; struct timespec begin, end; double elapsed_time; mem_init(); mem = malloc(1ULL * 1024 * 1024 * 1024); clock_gettime(CLOCK_MONOTONIC, &begin); memset(mem, 0x00, 1ULL * 1024 * 1024 * 1024); clock_gettime(CLOCK_MONOTONIC, &end); elapsed_time = (double)(end.tv_sec - begin.tv_sec) + ((double)(end.tv_nsec - begin.tv_nsec))/1000000000; fprintf(stderr, "Elapsed time: %lf\n", elapsed_time); clock_gettime(CLOCK_MONOTONIC, &begin); memset(page_addr, 0x00, 1ULL * 1024 * 1024 * 1024); clock_gettime(CLOCK_MONOTONIC, &end); elapsed_time = (double)(end.tv_sec - begin.tv_sec) + ((double)(end.tv_nsec - begin.tv_nsec))/1000000000; fprintf(stderr, "Elapsed time: %lf\n", elapsed_time); return 0; }
Editor is loading...