![]() |
|
Модераторы: bsa |
![]()
|
|
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
О! Не знал что динамический и статический хранятся в памяти по разному! Спасибо! Буду знать. Видимо, или не попалось мне это в книгах/статьях, или не придал этому значения. Потому и не акцентировал внимание, что в приведенном примере был статический массив.
есть такое ;) Есть такая. Но она мне пока не по плечу ) сделал лишь половину, и решил сперва сначала с базовыми вещами разобраться... Вот, разбираюсь... Еще бы со списками понять работу ) Заучил. Теперь не забуду. |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
mes, незаметил объявление, смотрел на работу (2 цикла по индексам) с массивом. Извини за поклеп.
ЗЫ Нах автор второго варианта делал с 2 циклами если лучше с одним?! (только, чтобы показать "как правильно", но это ему тоже до конца не удалось) Все еще думаю что в этом случае(в случае автора темы) лучше динамика с линейным расположением элементов т.к. проще и быстрее. Добавлено через 4 минуты и 28 секунд Santa12, имей ввиду, что хранение динамического массива частями (2мерного) далеко не является рациональным решением т.к. заведомо менее производительно и несколько менее, но все же расточительнее. |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Учту. Но, я правильно понимаю, что к статическому это замечание не относится? Жаль, никому не могу поставить плюсы. Исправлюсь, как только наберу сотню постов ;) |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
только при запоминании, делайте акцент не на статичность, и динамичность, а на способ выделения памяти под массив. потому как в этом примере динамический массив (хотя динамично только одно его направление) будет располагаться в памяти линейно :
это высказывание требует слишком много оговорок, и в принципе справедливо лишь к "излишнe" занимаемой памяти. |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Santa12, если массив не динамический (статический), то он просто выделяется в стеке в виде линейно упорядоченных элементов,т.е. то, что я описал, только в стеке. Если выделять динамически (предложенный мной вариант), то есть два варианта:
1. выделить также линейно 2. выделить сначала массив указателей, а затем каждый элемент этого массива проинициализировать своей частью памяти. В первом варианте все элементы располагаются рядом. К ним обращение будет происходить без лишних операций со стороны операционной сис-мы(ОС). Во втором возможно падение производительности т.к. ОС не гарантирует что выделенная память будет располагаться за памятью выделенной ранее, что потребует некоторых манипульций со стороны ОС в случае обращения к элементам. К тому же код твоей программы во втором варианте будит несколько днлинее, чем во втором (сложнее будет код выделения массива, высвобождения массиваб работы с массивом).
посмотри на код в постах выше и прикинь код в случае линейного расположения элементов. Вложенности циклов не будет. Проявятся возможности ОС по части кэширования. Проще код, меньше жрет памяти, думаю, что прога возможно будет по размеру меньше (критично в некоторых местах(контроллеры и т.п.)). ЗЫ ты в своем посте проверку на невозможность выделения забыл. Это сообщение отредактировал(а) fry - 4.6.2009, 18:09 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
если это высказывание относится только применительно к конкретному коду, то спорить не буду (см. код лень). Однако для общего случая высказывание не корректно. |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
По какой из частей моего суждения некорректно? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
В том что линейное раположение строк эффективнее в производительности при работе с матрицей, чем не линейное. Речь идет об одном и том же решении примененного к статическому и динамическому массиву. Если решение конкретной задачи приведено к линейному виду, то естественно у него будет преимущество. это обсуждалось в частности здесь : http://forum.vingrad.ru/forum/topic-249780...tml#st_0_view_0 Это сообщение отредактировал(а) mes - 4.6.2009, 18:19 |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Так... я создаю динамический массив вот таким образом:
mes, т .е. в отличие от приведенного вами варианта, он будет располагаться в памяти не линейно? Я правильно понимаю? fry, а можно немножко пояснить: КАК задать массив линейно? И как выглядит код первого, а как второго вариантов? Приношу свои извинения за назойливость, просто я пока все не "разжую" мне сложно понять что имеется в виду... Если вместо ответа будут ссылки на статьи/книги - тоже буду рад ) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
правильно, так как выделяете память кусками. хотя это относится к целевому массиву. А вот вспомогательные массивы (строки и массив указателей на строки) располагается линейно. Это сообщение отредактировал(а) mes - 4.6.2009, 18:24 |
|||
|
||||
| fry |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Там нет технологии тестирования, это раз, в данном случае не надо будет вычислять смещение по двум индексам это два. По части всего остального остаюсь при своем.
Кстати
Данная строчка будет не так красиво смотреться при добавнеии обработки исключений. Хотя конечно строчка красивая. mes, при всем уважении
Это не совсем правильно Это сообщение отредактировал(а) fry - 4.6.2009, 18:23 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Согласен, но, думаю, так тс легче будет понять когда массив линейный, а когда нет. Это сообщение отредактировал(а) mes - 4.6.2009, 18:26 |
|||
|
||||
| fry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Это сообщение отредактировал(а) fry - 4.6.2009, 18:28 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |