Я тестировал часть своего собственного кода, чтобы увидеть, сколько выделенной памяти требуется для исчерпания памяти в куче или свободном хранилище. Однако, если мой код неверен при его тестировании, я получаю совершенно разные результаты с точки зрения того, сколько памяти можно поместить в кучу.
Я тестирую две разные программы. Первая программа создает векторные объекты в куче. Вторая программа создает целочисленные объекты в куче.
Вот мой код:
#include <vector>
#include <stdio.h>
int main()
{
long long unsigned bytes = 0;
unsigned megabytes = 0;
for (long long unsigned i = 0; ; i++) {
std::vector<int>* pt1 = new std::vector<int>(100000,10);
bytes += sizeof(*pt1);
bytes += pt1->size() * sizeof(pt1->at(0));
megabytes = bytes / 1000000;
if (i >= 1000 && i % 1000 == 0) {
printf("There are %d megabytes on the heap\n", megabytes);
}
}
}
Окончательный вывод этого кода до получения ошибки bad_alloc
: «В куче 2000 мегабайт»
Во второй программе:
#include <stdio.h>
int main()
{
long long unsigned bytes = 0;
unsigned megabytes = 0;
for (long long unsigned i = 0; ; i++) {
int* pt1 = new int(10);
bytes += sizeof(*pt1);
megabytes = bytes / 1000000;
if (i >= 100000 && i % 100000 == 0) {
printf("There are %d megabytes on the heap\n", megabytes);
}
}
}
Окончательный вывод этого кода до получения ошибки bad_alloc
: «В куче 511 мегабайт»
Окончательный вывод в обеих программахсильно отличаетсяЯ что-то неправильно понимаю в бесплатном магазине? Я думал, что оба результата будут примерно одинаковыми.