Могу ли я увеличить размер статически выделенного массива?

StackOverflow https://stackoverflow.com/questions/1678371

  •  16-09-2019
  •  | 
  •  

Вопрос

Я знаю, что можно увеличить размер динамически выделяемого массива.

Но могу ли я увеличить размер статически выделенного массива?Если да, то какимобразом?

Редактировать: Хотя этот вопрос предназначен для языка C, рассмотрите и другие языки.Возможно ли это на любом другом языке?

Это было полезно?

Решение

Простой ответ - нет, это невозможно сделать.Отсюда и название "статический".

Сейчас во многих языках есть вещи, которые выглядят как статически выделенные массивы, но на самом деле являются статически выделенными ссылками на динамически выделяемый массив.Те, размер которых вы могли бы изменить.

Другие советы

в VB .NET это было бы:

Redim Preserve ArrayName(NewSize)

хотя не уверен, какой язык вам нужен...

И я бы не стал часто использовать эту команду...это ужасно неэффективно.Связанные списки и растущие структуры данных намного эффективнее.

Нет.Это не так.Здесь есть два варианта:

  1. Используйте динамический
  2. Или, рискуя потратить впустую память, если у вас есть представление о максимальном количестве элементов, которые будет хранить массив, статически распределите соответствующим образом

Да, это был С.

Если вы будете осторожны, вы можете использовать alloca().Массив размещается в стеке, но с точки зрения стиля кода это очень похоже на то, как если бы вы использовали malloc (вам не обязательно free тем не менее, это делается автоматически).Я позволю вам решить, называть ли это "статическим" массивом.

Нет.Статическое распределение дает компилятору разрешение делать всевозможные предположения, которые затем внедряются в программу во время компиляции.

Среди этих предположений есть то , что:

  1. безопасно помещать другие данные сразу после массива (не оставляя вам места для роста), и
  2. что массив начинается с определенного адреса, который затем становится частью машинного кода программы;вы не можете где-то выделить новый массив (и использовать его), потому что ссылки на адрес не могут быть обновлены.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top