เชเช เชฆเชฟเชตเชธ เชฎเชจเซ เชเชเชธเซเชฎเชฟเช เชฐเซเชคเซ เชเซเชก เชฎเชณเซเชฏเซ เชเซ เชเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชคเซเชจเชพ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเชฎเชพเช 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;
}
เชคเซ เชธเชฐเชณ เชเซ - เชฎเซเชฎเชฐเซ เชซเชพเชณเชตเซ เช เชจเซ เชคเซเชฎเชพเช เชเช เชเซเชเชพเชฌเชพเชเช เชฒเชเซ. เช เชจเซ เช เชเซเชธเซเช เชถเซเช เชฌเชคเชพเชตเซ เชเซ?
$ ./เชฎเซเชฎเชเซเชธเซเช
4.06504 GB / เชธเซเชเชเชก
เชเชถเชฐเซ 4GB/s.
เชถเซเช?!?!
เชเซเชตเซ เชฐเซเชคเซ?!?!?
เช เชเซเชฐ i7 เชเซ (เชเซเชเซ เชธเซเชฅเซ เชจเชตเซเช เชจเชฅเซ), DDR4, เชชเซเชฐเซเชธเซเชธเชฐ เชฒเชเชญเช เชฒเซเชก เชฅเชฏเซเชฒ เชจเชฅเซ - เชถเชพ เชฎเชพเชเซ?!?!
เชเชตเชพเชฌ, เชนเชเชฎเซเชถเชจเซ เชเซเชฎ, เช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชธเชพเชฎเชพเชจเซเชฏ เชเซ.
เชจเชตเซเช เชเชชเชฐเซเชเชฐ (เชเซเชฎ เชเซ malloc เชซเชเชเซเชถเชจ, เชฎเชพเชฐเซเช เชฆเซเชตเชพเชฐเชพ) เชตเชพเชธเซเชคเชตเชฎเชพเช เชฎเซเชฎเชฐเซ เชซเชพเชณเชตเชคเซเช เชจเชฅเซ. เช เชเซเชฒ เชธเชพเชฅเซ, เชซเชพเชณเชตเชฃเซเชเชฐเซเชคเชพ เชฎเซเชฎเชฐเซ เชชเซเชฒเชฎเชพเช เชฎเชซเชค เชธเซเชฅเชพเชจเซเชจเซ เชธเซเชเชฟ เชเซเช เชเซ, เช เชจเซ เชเซ เชคเซเชฏเชพเช เชเซเช เชจ เชนเซเชฏ เชคเซ, เชกเซเชเชพ เชธเซเชเชฎเซเชจเซเชเชจเซ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชเซ sbrk() เชจเซ เชเซเชฒ เชเชฐเซ เชเซ, เช เชจเซ เชชเชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎ เชชเชฐ เชชเชพเชเชพ เชซเชฐเซ เชเซ เชซเชเซเชค เชจเชตเชพ เชธเซเชฅเชพเชจเชจเชพ เชธเชฐเชจเชพเชฎเชพเชเชจเซ เชธเชเชฆเชฐเซเชญ เชซเชพเชณเชตเซเชฒ.
เชธเชฎเชธเซเชฏเชพ เช เชเซ เชเซ เชซเชพเชณเชตเซเชฒ เชตเชฟเชธเซเชคเชพเชฐ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชเซ. เชเซเช เชตเชพเชธเซเชคเชตเชฟเช เชฎเซเชฎเชฐเซ เชชเซเชทเซเช เซ เชซเชพเชณเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชจเชฅเซ.
เช เชจเซ เชเซเชฏเชพเชฐเซ เช เชซเชพเชณเชตเซเชฒ เชธเซเชเชฎเซเชจเซเชเชฎเชพเชเชฅเซ เชฆเชฐเซเช เชชเซเชทเซเช เชจเซ เชชเซเชฐเชฅเชฎ เชเชเซเชธเซเชธ เชฅเชพเชฏ เชเซ, เชคเซเชฏเชพเชฐเซ MMU เชชเซเชทเซเช เชจเซ เชเชพเชฎเซเชจเซ "เชถเซเช" เชเชฐเซ เชเซ, เชเซ เชชเชเซ เชเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชชเซเชทเซเช เชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชคเซเชจเซ เชตเชพเชธเซเชคเชตเชฟเช เชธเซเชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชคเซเชฅเซ, เชตเชพเชธเซเชคเชตเชฎเชพเช, เช เชฎเซ เชฌเชธ เช เชจเซ เชฐเซเชฎ เชฎเซเชกเซเชฏเซเชฒเซเชจเซ เชเชพเชฎเชเซเชฐเซเชจเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซ เชฐเชนเซเชฏเชพ เชจเชฅเซ, เชชเชฐเชเชคเซ เชเชชเชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎเชจเชพ 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) เชธเชพเชฅเซ เชซเชพเชณเชตเซเชฒ เชฌเชซเชฐเซเชธเชจเซ เชซเชเซเชค เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซเช เชเซเช.
เชคเชชเชพเชธ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ:
$ ./เชฎเซเชฎเชเซเชธเซเช
28.5714 GB / เชธเซเชเชเชก
เชฌเซเชเซ เชตเชพเชค.
เชตเชพเชฐเซเชคเชพเชจเซ เชจเซเชคเชฟเชเชคเชพ - เชเซ เชคเชฎเชจเซ เชเชกเชชเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชฎเซเชเชพ เชฌเชซเชฐเชจเซ เชเชฐเซเชฐ เชนเซเชฏ, เชคเซ เชคเซเชจเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช.
เชธเซเชฐเซเชธ: www.habr.com