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