вот простой тест, который я сделал на MSVC++ 2010 под Windows 7:
// A struct with sizeof(s) == 4, e.g 4 bytes
struct s
{
int x;
};
// Allocate 1 million structs
s* test1 = new s[1000000];
// Memory usage show that the increase in memory is roughly 4 bytes * 1000000 - As expected
// NOW! If I run this:
for (int i = 0; i < 1000000; i++)
new s();
// The memory usage is disproportionately large. When divided by 1000000, indicates 64 bytes per s!!!
Это общеизвестно или я что-то упускаю? Раньше я всегда создавал объекты на лету, когда это было необходимо. Например, new Triangle() для каждого треугольника в сетке и т. д.
Действительно ли существуют накладные расходы порядка величины для динамического распределения памяти отдельных экземпляров?
Ваше здоровье
РЕДАКТИРОВАТЬ:
Только что скомпилировал и запустил ту же программу на Windows XP с помощью g++: теперь накладные расходы составляют 16 байт, а не 64, как было раньше! Очень интересно.