Не уверен, если я согласен, поскольку выделение памяти МОЖЕТ занимать очень много времени (единственный способ, если вы предварительно не распределяете всю память, а затем повторно ее выделяете) .. Вам действительно нужно попробовать те же распределения и освобождения с несколькими размеры кучи гигабайт с миллионами записей, при этом многие приложения попадают в критическую секцию выделения (приложения для заметок, а не потоки), а также с очисткой / заменой диска из-за недостатка памяти. Вы также можете получить проблемы с заменой диска при распределении, и выполнение спин-блокировки в ожидании запроса диска, безусловно, не подходит.
И, как упомянул CyberShadow для однопоточного процессора, вы в конечном итоге перейдете к обычной блокировке с накладными расходами. Теперь язык может работать на многих встроенных CPUS, которые являются однопоточными.
Также, если вам удастся обойтись блокированным обменом, это лучше (так как он без блокировки, хотя все еще останавливает процессор и повышает LOCK # для многоядерной памяти), но большинство блокировок все равно используют это (но нужно делать больше). Однако структура кучи обычно означает, что блокированного обмена недостаточно, и в итоге вы создаете критическую секцию. Обратите внимание, что в (Поколение) питомнике Mark Sweep с GC можно выполнять распределения в виде взаимосвязанного сравнения и добавления указателя. Я делаю это для Cosmos C # OS GC, и это делает для распределения скорости стека.