áá
áºáá±á·ááŸá¬ áá¯á¶ážá
áœá²áá°áá
áºáá±á¬ááºá áá°á·áá²á· virtual machine ááŸá¬ RAM á
áœááºážáá±á¬ááºáááºááᯠá
á±á¬áá·áºááŒáá·áºááá¯á· ááŒáá¯ážá
á¬ážáá±áá²á· áá¯ááºááᯠááá±á¬áºáá ááœá±á·ááá¯ááºááá«áááºá áá®áá¯ááºááᯠáá«ááá±ážáá°áž (á¡á²áá®ááŸá¬ âááŒá±á
áœááºâ ááŸááááº)á á¡áá±ážááŒá®ážáá¯á¶ážááá¯áá² áá¬ážáá²á·áááºá áá®áá±á¬á· ááŒá±á¬ááºá á
áá°áá®ááá¯áá²ááŸá¬ ááŸááááºá
#include <sys/time.h>
#include <string.h>
#include <iostream>
#define CNT 1024
#define SIZE (1024*1024)
int main() {
struct timeval start;
struct timeval end;
long millis;
double gbs;
char ** buffers;
buffers = new char*[CNT];
for (int i=0;i<CNT;i++) {
buffers[i] = new char[SIZE];
}
gettimeofday(&start, NULL);
for (int i=0;i<CNT;i++) {
memset(buffers[i], 0, SIZE);
}
gettimeofday(&end, NULL);
millis = (end.tv_sec - start.tv_sec) * 1000 +
(end.tv_usec - start.tv_usec) / 1000;
gbs = 1000.0 / millis;
std::cout << gbs << " GB/sn";
for (int i=0;i<CNT;i++) {
delete buffers[i];
}
delete buffers;
return 0;
}
ááá¯ážááŸááºážááẠ- áááºááá¯áá®ááᯠááœá²áá±ááŒá®áž áááºážáá²ááá¯á· áá áºáá áºáá«ááá¯áẠáá±ážáá«á ááŒá®ážáá±á¬á· áá®á ááºážáááºááŸá¯á áá¬ááá¯ááŒááá²á
$ ./memtest
4.06504 GB ááᯠ/ s áá²á·
ááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº 4GB/sá
áá¬áá²?!?!
áááºááá¯áá²?!?!?
áááºážááẠCore i7 (áá±á¬ááºáá¯á¶ážáá±á«áºááá¯ááºáá±á¬áºáááºáž) DDR4á áááá¯áááºáá¬ááẠááááºááá¯ááºáá¯áá®ážáá«ážááŒá áºááẠ- áá¬ááŒá±á¬áá·áºáá²?!?!
á¡ááŒá±á á¡ááŒá²ááá¯ááᯠáá¯á¶ááŸááºááá¯ááºáá±á
á¡á±á¬áºááá±áá¬á¡áá Ạ(áááºážáááºážá¡á¬ážááŒáá·áº malloc áá¯ááºáá±á¬ááºáá»ááºáá²á·ááá¯á·) ááẠááŸááºáá¬ááºááᯠá¡ááŸááºááááºááœá²áá±áá±ážááŒááºážáááŸááá«á á€áá±á«áºááá¯ááŸá¯ááŒáá·áºá ááœá²áá±áá±ážáá°á memory pool á¡ááœááºážááŸá á¡ááá²á·áááºáá±áá¬áá»á¬ážá á¬áááºážááᯠááŒáá·áºááŸá¯ááŒá®áž áá áºáá¯áá»áŸáááŸááá«á áá±áá¬á¡ááá¯ááºážááᯠááá¯ážááŒáŸáá·áºááẠsbrk() ááá¯áá±á«áºááá¯ááŒá®ážáá±á¬áẠáááºáá±áá¬á¡áá áºá០ááááºá á¬ááᯠáááºááœáŸááºážáᬠáááá¯ááááºááá¯á· ááŒááºááœá¬ážáá«áááºá ááœá²áá±áá±ážáááºá
ááŒá¿áá¬ááŸá¬ ááœá²áá±áá±ážáá¬ážáá±á¬ á§áááá¬ááẠáá¯á¶ážáá¡áᯠááŒá áºáá±ááŒááºáž ááŒá áºáááºá á á áºááŸááºáá±á¬ ááŸááºáá¬ááºá á¬áá»ááºááŸá¬áá»á¬ážááᯠááœá²áá±ááá¬ážáá«á
á€ááœá²áá±áá»áá¬ážáá±ážáá¬ážáá±á¬ á¡ááá¯ááºážá០á á¬áá»ááºááŸá¬áá áºáá¯á á®ááá¯á· ááááá¯á¶ážáááºáá±á¬ááºááœáá·áºáááá·áºá¡áá« MMU ááẠá á¬áá»ááºááŸá¬á¡ááŸá¬ážáá áºáá¯ááᯠâááá¯ááºáááºâ ááŒá®ážáá±á¬áẠáááºáá±á¬ááºááŒáá·áºááŸá¯áá±ááá·áº virtual á á¬áá»ááºááŸá¬ááᯠá¡á á áºá¡ááŸááºáá áºáá¯á¡ááŒá ẠáááºááŸááºáá¬ážáááºá
ááá¯á·ááŒá±á¬áá·áºá á¡ááŸááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠáááºá áºáá¬ážááŸáá·áº RAM module áá»á¬ážá á áœááºážáá±á¬ááºáááºááᯠá ááºážáááºáá±ááŒááºážááá¯ááºáá² áááºáááºááŸá¯á áá áºá MMU ááŸáá·áº VMM á á áœááºážáá±á¬ááºáááºááŒá áºáááºá RAM áá¡á á áºá¡ááŸááºá áœááºážáá±á¬ááºáááºááá¯á ááºážáááºáááºá¡ááœááºáá»áœááºá¯ááºááá¯á·áááºááœá²áá±áá»áá¬ážáá±ážáá¬ážáá±á¬á§áááá¬áá»á¬ážááá¯áá áºááŒáááºáááºážá áááºáááºááá¯á¡ááºáááºá á¥ááᬠá€áá²á·ááá¯á·áá±á¬
#include <sys/time.h>
#include <string.h>
#include <iostream>
#define CNT 1024
#define SIZE (1024*1024)
int main() {
struct timeval start;
struct timeval end;
long millis;
double gbs;
char ** buffers;
buffers = new char*[CNT];
for (int i=0;i<CNT;i++) {
// FIXED HERE!!!
buffers[i] = new char[SIZE](); // Add brackets, &$# !!!
}
gettimeofday(&start, NULL);
for (int i=0;i<CNT;i++) {
memset(buffers[i], 0, SIZE);
}
gettimeofday(&end, NULL);
millis = (end.tv_sec - start.tv_sec) * 1000 +
(end.tv_usec - start.tv_usec) / 1000;
gbs = 1000.0 / millis;
std::cout << gbs << " GB/sn";
for (int i=0;i<CNT;i++) {
delete buffers[i];
}
delete buffers;
return 0;
}
ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠáá°ááááºááá¯áž (char 0) ááŒáá·áº ááœá²áá±áááºááŸááºáá¬ážáá±á¬ ááŒá¬ážáá¶áá»á¬ážááᯠááá¯ážááá¯ážááŸááºážááŸááºážááẠá¡á ááŒá¯áá«áááºá
áá«ááá¯á·á á áºáá±ážáááº
$ ./memtest
28.5714 GB ááᯠ/ s áá²á·
áá±á¬ááºáá áºáá¯á
áá¬ááºáááºážáááá¯ááºáá»áá·áºááá¬áž - áá»ááºááŒááºá
áœá¬áá¯ááºáá±á¬ááºááẠbuffers ááŒá®ážáá»á¬ážááá¯á¡ááºáá«áá áááºážááá¯á·ááᯠá¡á
ááŒá¯ááẠááá±á·áá«ááŸáá·áºá
source: www.habr.com