2014-12-18 3 views
-2

В моих программах на C и C++ у меня есть три массива: один для координаты x, координата y и местоположение в списке. Мне было интересно, будет ли меньше памяти, если я поместил все три в один и тот же массив. Есть идеи? Кроме того, есть ли что-то только для определения одного измерения и наличия другой переменной? Благодарим вас за помощь.Три одномерные или одномерные

+1

Вы смешиваете терминологию. Когда вы говорите «список», что вы имеете в виду? – wakjah

+3

Ваш вопрос непонятен. Вы используете 'c' или' C++ '? Почему вы используете массивы, а не переменные? Что вы подразумеваете под списком? –

+0

Данные для массивов берутся из текстового файла в виде списка. Причина, по которой я использую массивы, состоит в том, что для хранения может быть более ста точек. У меня есть программа в c и C++. Мне нравится обновляться на обоих языках, поэтому я прилагаю зеркальные программы. –

ответ

3

Вряд ли это займет память, чтобы собрать их вместе; в зависимости от структуры упаковки и выравнивания, может потребоваться больше. В этом случае это сомнительно. Скорее всего, они будут такими же.

Одна вещь, которая будет затронута, - это когерентность кеша. Если вы, как правило, одновременно получаете доступ ко всем значениям, будет немного более эффективно, чтобы они были близки друг к другу. С другой стороны, если вы, как правило, заархивируете один массив за один раз, более эффективно будет их разделять.

P.S. Если это не было очевидно, я выступаю за то, чтобы помещать значения в структуру, а не в 2D-массив. Макет памяти будет похож, но синтаксис отличается.

+0

Вы говорите «немного» ... Я говорю, наверное, довольно много, особенно учитывая, что это похоже на графику. –

+0

@LightnessRacesinOrbit Я не очень замер в последнее время, поэтому я не хотел преувеличивать пользу. –

+0

Это разумно. –

0

Требуется точно такой же объем памяти; это будет просто устроено по-другому.

Это (возможно, вообще) лучший стиль, чтобы иметь один массив сложных вещей, если эти вещи идут вместе. Одна из причин заключается в том, что вы не можете случайно иметь различное количество каждого компонента.

0

Многомерный размерный массив - это всего лишь одномерный массив. Имея это в виду, вы хотели бы использовать принципы локализации данных (при доступе к точке данных в памяти легче загружать расположенные рядом с ней точки данных).

Принимайте во внимание, будете ли вы получать доступ к своим x за один раз, тогда ваши y - ваши местоположения, или вы будете получать доступ к x y и данным местоположения одновременно. Посмотрите, как многомерные массивы представлены в памяти, чтобы решить, как вы «группируете» свои данные.