#include <iostream>
#include <cstdlib>
using namespace std;

const int BIG = 2000000;

struct Big {

	int a[BIG];

};

void fillBig(Big big) {
	for(int i = 0; i < BIG; ++i) {
		big.a[i] = rand() % 100;
	}
}

void fillBig(Big *big) {
	for(int i = 0; i < BIG; ++i) {
		// Първи начин.
		(*big).a[i] = rand() % 100;
	}
}

void printBig(Big *big) {
	for(int i = 0; i < BIG; ++i) {
		        // Втори начин (важи само за структури).
		cout << big->a[i] << " ";
	}
	cout << endl;
}

int main() {

	Big big = {};
	cout << "size of big = " 
		 << sizeof(big) / 1024.f / 1024.f 
		 << "MB" << endl;

	/*
	 * При извикването на метода, big се копира
	 * и се използват нови ~8МБ памет, което прави
	 * общо около 16, което е повече от паметта, с която
	 * разполагаме (това може и да работи на някои
	 * операционни системи или компилатори).
	 */
	// fillBig(big);

	fillBig(&big);
	printBig(&big);

	return 0;
}
