āĻ–āĻžāĻ°āĻžāĻĒ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸā§ āĻŦā§‡āĻļāĻŋ

āĻāĻ•āĻĻāĻŋāĻ¨ āĻ†āĻŽāĻŋ āĻ˜āĻŸāĻ¨āĻžāĻ•ā§āĻ°āĻŽā§‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¤āĻžāĻ° āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ 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, āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§‹āĻĄ āĻšāĻ¯āĻŧ āĻ¨āĻž - āĻ•ā§‡āĻ¨?!?!

āĻ‰āĻ¤ā§āĻ¤āĻ°, āĻŦāĻ°āĻžāĻŦāĻ°ā§‡āĻ° āĻŽāĻ¤ā§‹, āĻ…āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĨ¤

āĻ¨āĻ¤ā§āĻ¨ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° (āĻŽā§āĻ¯āĻžāĻ˛ā§‹āĻ• āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻŽāĻ¤ā§‹, āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĻā§āĻŦāĻžāĻ°āĻž) āĻ†āĻ¸āĻ˛ā§‡ āĻŽā§‡āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻāĻ‡ āĻ•āĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡, āĻŦāĻ°āĻžāĻĻā§āĻĻāĻ•āĻžāĻ°ā§€ āĻŽā§‡āĻŽāĻ°āĻŋ āĻĒā§āĻ˛ā§‡ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĻā§‡āĻ–ā§‡āĻ¨, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ•ā§‹āĻ¨āĻŸāĻŋāĻ“ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡ āĻ¤āĻŦā§‡ āĻĄā§‡āĻŸāĻž āĻ¸ā§‡āĻ—āĻŽā§‡āĻ¨ā§āĻŸ āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ 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) āĻ¸āĻš āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻŦāĻžāĻĢāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋāĨ¤

āĻšā§‡āĻ• āĻ•āĻ°ā§āĻ¨:

$./āĻŽā§‡āĻŽāĻŸā§‡āĻ¸ā§āĻŸ
28.5714 GB / āĻ—ā§āĻ˛āĻŋ

āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻŦāĻŋāĻˇāĻ¯āĻŧ.

āĻ—āĻ˛ā§āĻĒā§‡āĻ° āĻ¨ā§ˆāĻ¤āĻŋāĻ•āĻ¤āĻž - āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻĄāĻŧ āĻŦāĻžāĻĢāĻžāĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻžāĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨