เจเฉฑเจ เจฆเจฟเจจ เจฎเฉเจจเฉเฉฐ เจเจฒเจคเฉ เจจเจพเจฒ เจเฉเจก เจฎเจฟเจฒเจฟเจ เจเจฟ เจเฉฑเจ เจเจชเจญเฉเจเจคเจพ เจเจชเจฃเฉ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจ เจตเจฟเฉฑเจ เจฐเฉเจฎ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ เจจเจฟเจเจฐเจพเจจเฉ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐ เจฐเจฟเจนเจพ เจธเฉเฅค เจฎเฉเจ เจเจน เจเฉเจก เจจเจนเฉเจ เจฆเฉเจตเจพเจเจเจพ (เจเฉฑเจฅเฉ เจเฉฑเจ "เจซเฉเจเจเจฒเฉเจฅ" เจนเฉ) เจ
เจคเฉ เจฎเฉเจ เจธเจฟเจฐเจซเจผ เจธเจญ เจคเฉเจ เจเจผเจฐเฉเจฐเฉ เจเฉฑเจกเจพเจเจเจพเฅค เจเจธ เจฒเจ, เจฌเจฟเฉฑเจฒเฉ เจธเจเฉเจกเฉเจ เจตเจฟเฉฑเจ เจนเฉ!
#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 / เจธเจเจฟเฉฐเจ
เจฒเจเจญเจ 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) เจจเจพเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจฌเจซเจฐเจพเจ เจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจ เจธเฉเจ เจเจพเจเจเจฆเฉ เจนเจพเจ:
$ ./memtest
28.5714 GB / เจธเจเจฟเฉฐเจ
เจเจ เจนเฉเจฐ เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ.
เจเจนเจพเจฃเฉ เจฆเจพ เจจเฉเจคเจฟเจ - เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจคเฉเจเจผเฉ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจตเฉฑเจกเฉ เจฌเจซเจฐเจพเจ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉเฅค
เจธเจฐเฉเจค: www.habr.com