แž”แž“แŸ’แžแžทแž…แž‘แŸ€แžแžขแŸ†แž–แžธแž€แžถแžšแž’แŸ’แžœแžพแžแŸแžŸแŸ’แžแž˜แžทแž“แž›แŸ’แžข

แžแŸ’แž„แŸƒแž˜แžฝแž™แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž‡แžฝแž”แžŠแŸ„แž™แž…แŸƒแžŠแž“แŸ’แž™แž“แžผแžœแž€แžผแžŠแžŠแŸ‚แž›แžขแŸ’แž“แž€แž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹แž€แŸ†แž–แžปแž„แž–แŸ’แž™แžถแž™แžถแž˜แžแžถแž˜แžŠแžถแž“แžŠแŸ†แžŽแžพแžšแž€แžถแžš 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 / แžœแžทแž“แžถแž‘แžธ

แž”แŸ’แžšแž แŸ‚แž› 4GB/s แŸ”

แžขแŸ’แžœแžธ?!?!

แž™แŸ‰แžถแž„แž˜แŸ‰แŸแž…?!?!?

แž“แŸแŸ‡แž‚แžบแž‡แžถ Core i7 (แž‘แŸ„แŸ‡แž”แžธแž‡แžถแž˜แžทแž“แž˜แŸ‚แž“แž‡แžถแžแŸ’แž˜แžธแž”แŸ†แž•แžปแžแž€แŸแžŠแŸ„แž™) DDR4 แžแžฝแžšแž€แŸ’แž”แžถแž›แžŸแŸ’แž‘แžพแžšแžแŸ‚แž˜แžทแž“แž•แŸ’แž‘แžปแž€ - แž แŸแžแžปแžขแŸ’แžœแžธ?!?!

แž…แž˜แŸ’แž›แžพแž™โ€‹แžŠแžผแž…โ€‹แžšแžถแž›แŸ‹โ€‹แžŠแž„โ€‹แž‚แžบโ€‹แžแžปแžŸโ€‹แž’แž˜แŸ’แž˜แžแžถแŸ”

แž”แŸ’แžšแžแžทแž”แžแŸ’แžแžทแž€แžšแžแŸ’แž˜แžธ (แžŠแžผแž…แž‡แžถแž˜แžปแžแž„แžถแžš malloc แžŠแŸ„แž™แžœแžทแž’แžธแž“แŸแŸ‡) แž–แžทแžแž‡แžถแž˜แžทแž“แž”แŸ‚แž„แž…แŸ‚แž€แžขแž„แŸ’แž‚แž…แž„แž…แžถแŸ†แž‘แŸแŸ” แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž แŸ…แž‘แžผแžšแžŸแž–แŸ’แž‘แž“แŸแŸ‡ แžขแŸ’แž“แž€แž”แŸ‚แž„แž…แŸ‚แž€แž˜แžพแž›แž”แž‰แŸ’แž‡แžธแž‘แžธแžแžถแŸ†แž„แžฅแžแž‚แžทแžแžแŸ’แž›แŸƒแž“แŸ…แž€แŸ’แž“แžปแž„แžขแž„แŸ’แž‚แž…แž„แž…แžถแŸ† แž แžพแž™แž”แŸ’แžšแžŸแžทแž“แž”แžพแž‚แŸ’แž˜แžถแž“แž‘แŸ แž แŸ…แž‘แŸ… sbrk() แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž€แžพแž“แž•แŸ’แž“แŸ‚แž€แž‘แžทแž“แŸ’แž“แž“แŸแž™ แž แžพแž™แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แžแŸ’แžšแžกแž”แŸ‹แž‘แŸ…แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžœแžทแž‰แžŠแŸ„แž™แž™แŸ„แž„แž‘แŸ…แžขแžถแžŸแž™แžŠแŸ’แž‹แžถแž“แž–แžธแž‘แžธแžแžถแŸ†แž„แžแŸ’แž˜แžธแž‚แŸ’แžšแžถแž“แŸ‹แžแŸ‚ แž”แŸ‚แž„แž…แŸ‚แž€แŸ”

แž”แž‰แŸ’แž แžถแž‚แžบแžแžถแžแŸ†แž”แž“แŸ‹แžŠแŸ‚แž›แž”แžถแž“แž”แŸ‚แž„แž…แŸ‚แž€แž‚แžบแž“แžทแž˜แŸ’แž˜แžทแžแž‘แžถแŸ†แž„แžŸแŸ’แžšแžปแž„แŸ” แž‚แŸ’แž˜แžถแž“แž‘แŸ†แž–แŸแžšแžŸแžแžทแž–แžทแžแžแŸ’แžšแžผแžœแž”แžถแž“แž”แŸ‚แž„แž…แŸ‚แž€แž‘แŸแŸ”

แž แžพแž™แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แž€แžถแžšแž…แžผแž›แž”แŸ’แžšแžพแž›แžพแž€แžŠแŸ†แž”แžผแž„แž‘แŸ…แž€แžถแž“แŸ‹แž‘แŸ†แž–แŸแžšแž“แžธแž˜แžฝแž™แŸ—แž–แžธแž•แŸ’แž“แŸ‚แž€แžŠแŸ‚แž›แž”แžถแž“แž”แŸ‚แž„แž…แŸ‚แž€แž“แŸแŸ‡แž€แžพแžแžกแžพแž„ MMU "แž”แžถแž‰แŸ‹" แž€แŸ†แž แžปแžŸแž‘แŸ†แž–แŸแžšแž˜แžฝแž™ แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž“แŸ„แŸ‡แž‘แŸ†แž–แŸแžšแž“แžทแž˜แŸ’แž˜แžทแžแžŠแŸ‚แž›แž€แŸ†แž–แžปแž„แž…แžผแž›แž”แŸ’แžšแžพแžแŸ’แžšแžผแžœแž”แžถแž“แž•แŸ’แžแž›แŸ‹แž‡แžถแž‘แŸ†แž–แŸแžšแž–แžทแžแž”แŸ’แžšแžถแž€แžŠแž˜แžฝแž™แŸ”

แžŠแžผแž…แŸ’แž“แŸแŸ‡แžแžถแž˜แž€แžถแžšแž–แžทแž แž™แžพแž„แž˜แžทแž“แž€แŸ†แž–แžปแž„แžŸแžถแž€แž›แŸ’แž”แž„แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž“แŸƒแž˜แŸ‰แžผแžŒแžปแž›แžกแžถแž“แž€แŸ’แžšแžปแž„ แž“แžทแž„ RAM แž‘แŸ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžšแž”แžŸแŸ‹ 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

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹