


«Маленький» здесь - это эмпирическое правило, основанное на том, как два класса управляют своей памятью изнутри. По сути, CAtlArray обеспечивает более детальный контроль над используемой памятью, а CSimpleArray работает с памятью просто, но наивно.
В частности, когда элемент добавляется в CSimpleArray, если массив уже использует всю выделенную им память, он удваивает свой размер, что является довольно дорогостоящей операцией. Вновь созданный CSimpleArray будет начинаться с места для 0 элементов. Допустим, вы хотите добавить в массив 5 элементов. Это будет выглядеть так:
Также обратите внимание, что нет способа указать начальный размер CSimpleArray, поэтому этот шаблон будет всегда.
С другой стороны, CAtlArray позволяет вам сразу указать всю выделенную память с помощью метода SetCount (). Используя тот же пример, что и выше, перед добавлением элементов вызовите SetCount (5). Тогда всегда будет место для 5 предметов, и перераспределения делать не нужно.
Итак, чтобы ответить на вопрос: используйте CAtlArray, если вы заботитесь об управлении памятью, особенно если вас беспокоит производительность. Используйте CSimpleArray, если вы просто хотите сохранить несколько элементов в списке и не заботитесь о том, как управляется память, которую занимает список. Чтобы ответить на конкретный вопрос о том, что в данном контексте означает «маленький» и «большой», «маленький» означает достаточно мало элементов, которые вы можете перераспределять каждый раз, когда длина превышает следующую степень двойки.
Также стоит отметить, что CSimpleArray позволяет выполнять поиск в массиве с помощью метода Find (), а CAtlArray - нет.
(Примечание: мой ответ основан только на просмотре исходного кода ATL.)