Наиболее близкая вещь, которую я могу придумать к массиву на основе стека, - это структура, вложенная вручную; для массива размером N ^ M размер кода будет O (MN) и время доступа O (M); можно масштабировать M и N так, как это удобно (например, можно обрабатывать массив из 4096 элементов в виде вложенных четырехэлементных структур с шестью глубинами, вложенных четырехэлементных структур с четырьмя глубинами или вложенных 16-элементных структур с тремя глубинами, вложенных с двумя глубинами) 64-элементные структуры и т. Д.) Если кто-то хочет вложить вложенные массивы из 16 элементов в три глубины (вероятно, наиболее практичный компромисс), можно определить структуру из 16 элементов с полями от f0 до f15 и метод доступа, использующий переключатель / чехол, чтобы выбрать элемент. Затем можно определить структуру из 16 элементов, структуру из 16 элементов и т. Д.
Как правило, использование стандартного массива лучше, чем использование структур типа значения для имитации массивов, но бывают случаи, когда использование массива в качестве типа значения было бы выгодно. Преимущества массивов типов значений, как правило, ограничены в .net, однако, некоторыми ограничениями в обработке типов значений посредством ссылки. Хотя было бы неплохо, если бы можно было просто получить доступ к элементу 0x123 из массива, описанного выше, написав «MyArrayishThing [1] [2] [3]», это было бы неэффективно для чтения и неэффективно для записи (так как подвыражение MyArrayishThing [1 ] создаст копию структур, содержащих 256 элементов массива). Вместо этого необходимо передать MyArrayishThing [1] со ссылкой на процедуру, которая может получить доступ к элементу 2 этого элемента, и передать его посредством ссылки на процедуру, чтобы получить доступ к элементу 3 этого элемента. Это можно сделать эффективно, но код выглядит довольно неприятно.