Здравствуйте. Я новичок в Си и у меня возник один вопрос на который сложно найти однозначный ответ. Как минимум из за того что я не знаю всех тонкостей. В си строка это массив символов. Так вот какая практика считается лучше. У меня есть программа в которой много текста, статистического и с ним все понятно. Но вот с динамическими строками я зашел в тупик. Их около 20-30, в основном они не большие. От 4 до 30-35 символов.
Так вот как лучше поступить. Объявить каждую строку с заранее большим значением. Например 35 символов. Или все таки динамически выделять. Первый способ мне кажется более простым и надежным. Но где то пишут что это плохая практика и.т.д. В целом вообще интересны любые советы по строкам в Си. Так как информации на Рус. мало в сравнение с хайповыми языками.
GavriKos, У меня чистый си, я использую его для создания программы на графическом фреймворке. В теории я могу использовать C++, но его я совсем не знаю.
А есть какие то издержки? Мне просто хотелось бы разобраться. Например до какой длинны строк лучше использовать такой подход. Я часто вижу когда кто то пишет что то вроде
"char msg [255]" где строка меньше. Но я так понял это просто что бы написать код, а потом уже оптимизировать.
Выделение памяти - это время, и весьма немалое.
Выделение динамической памяти под каждую новую строчку - это медленная программа.
Выделение динамической памяти один раз в начале программы под массив строчек, даже если не вся она будет использована - это быстро.
Можно копнуть в кишки аллокейт, увидеть что память выделяется страницами (4к), и если вы заказали 4100 байт, то вы получите 4100, но вашему процессу выделится 8192б
Полезно переиспользовать уже выделенную память. Если ее не хватает, можно выделять новую память не по одной строке, а помня издержки как минимум страницу.
Нужно понимать что оптимизация это хорошо, но преждевременная оптимизация - лишнее.
Если вы пишете простую прогу на домашнем компе, и она займет не 1 а 5 мб из гигабайт оперативки, то вообще неважно что и как выделяется, разве что вы хотите разобрать именно этот момент.
Saboteur, Спасибо за развернутый ответ! Думаю пока не стану лучше понимать Си, буду минимально использовать выделение памяти. Пока лучше не пойму этот момент.