Перейти к содержанию
    

Неконстантный размер локальных массивов - можно ли?

Позволяют ли такое стандарты С/С++ и какие именно?

int func( int size )
{
    int array[size]
    // ...
    return 0;
}
Изменено пользователем Darth Vader

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К вопросу: в IAR эта фитча поддерживается компилятором С (с включенной опцией "Allow VLA") и не поддерживается С++...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Darth Vader said:

Позволяют ли такое стандарты С/С++ и какие именно?


int func( int size )
{
    int array[size]
    // ...
    return 0;
}
 

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

А если это нужно в стеке, то подобной решение крайне небезопасно само по себе :buba:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

54 minutes ago, Forger said:

...подобной решение крайне небезопасно само по себе...

Безусловно, но в мультитреде (при ограниченном стеке) и когда по каким-то причинам malloc нежелателен - может пригодиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Axel said:

мультитреде 

а это еще опаснее, особенно если ось не предусматривает контроля стеков задач.

Размещать массив в стеке это вообще моветон, создайте массив статически и все проблема уйдет, не возникнув.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С 99% вероятностью можно предположить, что потребность - надуманная. Если конечно речь не идёт о программировании под ОС типа win или линух.

 

8 минут назад, Axel сказал:

Безусловно, но в мультитреде (при ограниченном стеке)

И как это поможет "при ограниченном стеке"? Поясните.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 минуты назад, Forger сказал:

а это еще опаснее, особенно если ось не предусматривает контроля стеков задач.

Скорее даже не просто контроля, а - динамического управления размером (подкачки). Как в винде.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, jcxz said:

динамического управления размером (подкачки). Как в винде.

А разве существуют подобные готовые решения для рядовых ртос под МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, Forger сказал:

А разве существуют подобные готовые решения для рядовых ртос под МК?

Я не знаю. Поэтому и написал только про win. И наверное в линухе такое есть? Должно быть.

Чтобы такое сделать нужно наличие MMU. Если есть MMU - можно сделать самостоятельно и без поддержки ОС. А без MMU и ОС ничего не сможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, jcxz said:

линухе

Не стоит здесь произносить это запрещенное слово ))

А то тему потрут в итоге 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Forger сказал:

Не стоит здесь произносить это запрещенное слово ))

Я произношу без какой-либо отрицательной интерпретации. Как ОС, использующую виртуальную память И позволяющую пользователю запускать задачи в произвольной комбинации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 minutes ago, jcxz said:

И как это поможет "при ограниченном стеке"? Поясните.

Когда надо иногда два "больших" массива, иногда три "маленьких" . Мне от алгоритмистов такие заморочки иногда прилетали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Axel said:

Мне от алгоритмистов такие заморочки иногда прилетали...

Вашим "алгоритмистам" не помешают доп. курсы по особенностям кодирования на железках без винды или линуха :dirol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, Forger said:

Вашим "алгоритмистам" не помешают доп. курсы по особенностям кодирования на железках без винды или линуха :dirol:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...