Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическая память, массивы и все о них

43K
03 марта 2009 года
metrA
15 / / 03.03.2009
Всем привет! Интерисует такой вопрос...
... например в Паскале можно написать SetLength() и указав на еденицу больше размер динамического массива выделить еще память под одну позицию, может так делать и неправильно, но это работает. Так вот, а можно ли в С++ сделать так же, т.е. если я имею массив(указатель) можно ли после того как я уже после команды new выделил память для 10 элементов array[0]...array[9], выделить еще и для 11-го, но так чтоб к нему можно было обратиться как array[10]?
842
03 марта 2009 года
sigmov
301 / / 16.09.2008
Конечно. Функция reallok(void*,int size) - довыделяет память до указанного размера в (!)байтах если не получается, действует как обычный mallok(int size). Т.е. если было 10 элементов в int* array, а понадобился 11, то array = reallok(array,sizeof(int)*11)
240
03 марта 2009 года
aks
2.5K / / 14.07.2006
Во первых, realloc и malloc
Во вторых, не в байтах размер. Не надо на этом акцентировать. В С и С++ и их стандартных функциях нет понятия байт.
В третьих, realloc не вызовет конструктор для новых объектов типа. А этом может быть необходимо. И об этом следует помнить.
255
03 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
а что мешает использовать STL'ный vector?
43K
03 марта 2009 года
metrA
15 / / 03.03.2009
...ЛЮДИ, дело в том, что довыделять память нужно не для стандартных типов данных, а для очень хитрой структуры, причем очень объемной по своей структуре (вся инфа о объекте в пространстве - точки, их нормали, треугольники, их нормали, текстурные координаты, материалы сцены, материалы по граням, т.е. полностью файл *.3DS, а сможет ли вышеуказанная функция выполнить довыделение места из кучи????
Ща я считаю предварительно обекты и материалы в сцене, а после выделяю необходимое место, но хотелось бы делать это по мере четения, экономив таким образом и память и время(!):rolleyes:
43K
03 марта 2009 года
metrA
15 / / 03.03.2009
И еще, ведь я пишу в С++, а там есть уже "new", причем это уже часть языка, зачем мне использовать аналогию из С, хотя это и не важно, но...
3
03 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: metrA
И еще, ведь я пишу в С++, а там есть уже "new", причем это уже часть языка, зачем мне использовать аналогию из С, хотя это и не важно, но...



"а что мешает использовать STL'ный vector? " или др. контейнеры?

240
03 марта 2009 года
aks
2.5K / / 14.07.2006
Из C не совсем аналогия, new все же переопределяемый оператор, плюс вызывающий конструктор, и собственно возвращающий указатель конкретного типа.

В данном случае мне кажется вполне логично было бы использоваться std::vector
25K
03 марта 2009 года
San_
42 / / 03.10.2007
а еще логичнее std::list, т.к. изменение размера вектора совсем не быстрая процедура, списки быстрее
имхо
240
03 марта 2009 года
aks
2.5K / / 14.07.2006
Смотря для чего. Списки и массивы разные вещи. )
У вектора константная скорость доступа по индексу, и добавления нового элемента в конец, при условвии, что зарезервировано достаточно места заранее.
У списка, тролько константный доступ и вставка в любое место при условии наличия итератора на это места. А так доступ линейный. Так что сами понимаете от задачи надо исходить. )
43K
03 марта 2009 года
metrA
15 / / 03.03.2009
Не хочется лезть в классы и подобную дрянь, должен же ведь быть способ, причем достаточно простой, чтоб довыделить память
3
03 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: metrA

Не хочется лезть в классы и подобную дрянь, должен же ведь быть способ, причем достаточно простой, чтоб довыделить память


Не хочется "лезть в подобную дрянь" (или, просто, учиться?), не пиши на C++, впрочем, как и на любом другом ОО-языке.
Другого способа нет.

87
03 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: metrA
Не хочется лезть в классы и подобную дрянь, должен же ведь быть способ, причем достаточно простой, чтоб довыделить память


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

разве трудно написать следующее:

vector<int> array; // вот вам совсем пустой массив из int
array.push_back(1); // теперь в массиве один элемент, равный единице

Вместо int можно написать вашу хитрую структуру.

842
03 марта 2009 года
sigmov
301 / / 16.09.2008
new - вызов конструктора и память он не довыделит.
а вот realloc() - самый экономный способ выделения памяти.

STL vector<T> - вещь хорошая, надежная, но медленная
87
03 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: sigmov
STL vector<T> - вещь хорошая, надежная, но медленная


он не обязан быть медленным. Это зависит от реализации, от компилятора:
http://forum.codenet.ru/showthread.php?t=50513

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

3
03 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: sigmov

а вот realloc() - самый экономный способ выделения памяти.


Ну и чем же он экономичный?
Он ничем не отличается от malloc/new + memcopy.

Цитата: sigmov

STL vector<T> - вещь хорошая, надежная, но медленная


Заблуждение! Смотри по форуму, уже не раз доказывал обратное.

43K
03 марта 2009 года
metrA
15 / / 03.03.2009
Цитата: Kogrom
он не обязан быть медленным. Это зависит от реализации, от компилятора:
http://forum.codenet.ru/showthread.php?t=50513

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



А как насчет 3D графики Realtime?????

43K
03 марта 2009 года
metrA
15 / / 03.03.2009
Цитата: Green
Не хочется "лезть в подобную дрянь" (или, просто, учиться?), не пиши на C++, впрочем, как и на любом другом ОО-языке.
Другого способа нет.



Вопрос не в том, что нет желания учиться, я как бы ими пользуюсь когда считаю нужным, но не сильно хочется вешать кучу соплей на софтину из-за простого выдиления памяти.... задача состоит в том, чтоб довыделить, но коль уж нет быстрого решения, а нужно лишь цеплять сторонние строки кода, тогда проще оперерировать с указателями на отдельную структуру, хотя и потеряю пару 10^6 тактов, а что делать:eek:

3
03 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: metrA
А как насчет 3D графики Realtime?????


Там вообще нельзя перераспределять память, а нужно юзать пулы.
Но vector и там поможет.

Цитата: metrA
Вопрос не в том, что нет желания учиться, я как бы ими пользуюсь когда считаю нужным, но не сильно хочется вешать кучу соплей на софтину из-за простого выдиления памяти....


Эти "сопли" как раз и созданы для "простого выдиления памяти".
Чем придумывать свои зеленые казюльки, быстрее и проще воспользоваться готовыми.
Пока ты тут выясняешь что да как, уже 300 раз написал и переписал бы.

43K
05 марта 2009 года
metrA
15 / / 03.03.2009
Цитата: Green
Там вообще нельзя перераспределять память, а нужно юзать пулы.
Но vector и там поможет.


Эти "сопли" как раз и созданы для "простого выдиления памяти".
Чем придумывать свои зеленые казюльки, быстрее и проще воспользоваться готовыми.
Пока ты тут выясняешь что да как, уже 300 раз написал и переписал бы.



воспользовался realloc, работает, причем так как хотелось...всем спасибо за помощь!!!!:D

3
05 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: metrA
воспользовался realloc, работает, причем так как хотелось...всем спасибо за помощь!!!!:D




Всем привет! Интерисует такой вопрос...
Вот в Греции можно сунуть ноги в сандали и выйти на улицу, может так делать и неправильно, но это удобно. Так вот, а можно ли в России сделать так же, т.е. если я имею ноги, обуть их, но так чтоб шнурки не завязывать?


Конечно. Резинофые сапоги защищают от аквы и у них нет шнурков.


Во первых, резиновые
Во вторых, не от аквы, а от воды. Не надо на этом акцентировать. На Руси и в России и их словарях нет понятия аква.
В третьих, сапоги не закрепляются на ноге. . А этом может быть необходимо. И об этом следует помнить.


а что мешает использовать обувь на молнии?


...ЛЮДИ, дело в том, что обувь нужна не для стандартных прогулок, а для очень хитрой походки
И еще, ведь я живу в России, а там есть уже "обувная лопатка", причем это уже часть гардероба, зачем мне использовать аналогию из Руси, хотя это и не важно, но...



"а что мешает использовать обувь на молнии ? " или липучках?



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



Не хочется "лезть в подобную дрянь", не ходи в ботинках, впрочем, как и в любой другой современной обуви
Другого способа нет.


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


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



А как насчет бега на короткие дистанции?????
Вопрос не в том, что нет желания зайти в магазин, я как бы ими пользуюсь когда считаю нужным, но не сильно хочется вешать кучу соплей на обувь из-за простого нешнурования.... задача состоит в том, чтоб одеть, но коль уж нет быстрого решения, а нужно лишь цеплять что-то на ноги, тогда проще оперерировать с подошвой и каблуками, хотя и потеряю пару 10^6 сапожных гвоздей, а что делать



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



воспользовался сапогами, работает, причем так как хотелось... до пивного ларька добегаю быстрее, чем пиво "подходит к концу"
всем спасибо за помощь!!!! :D

92
05 марта 2009 года
Тень Пса
2.2K / / 19.10.2006
хорошо сказал
240
05 марта 2009 года
aks
2.5K / / 14.07.2006
Green, порадовал =))
43K
06 марта 2009 года
metrA
15 / / 03.03.2009
Цитата: Green

Всем привет! Интерисует такой вопрос...
Вот в Греции можно сунуть ноги в сандали и выйти на улицу, может так делать и неправильно, но это удобно. Так вот, а можно ли в России сделать так же, т.е. если я имею ноги, обуть их, но так чтоб шнурки не завязывать?


Конечно. Резинофые сапоги защищают от аквы и у них нет шнурков.


Во первых, резиновые
Во вторых, не от аквы, а от воды. Не надо на этом акцентировать. На Руси и в России и их словарях нет понятия аква.
В третьих, сапоги не закрепляются на ноге. . А этом может быть необходимо. И об этом следует помнить.


а что мешает использовать обувь на молнии?


...ЛЮДИ, дело в том, что обувь нужна не для стандартных прогулок, а для очень хитрой походки
И еще, ведь я живу в России, а там есть уже "обувная лопатка", причем это уже часть гардероба, зачем мне использовать аналогию из Руси, хотя это и не важно, но...



"а что мешает использовать обувь на молнии ? " или липучках?



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



Не хочется "лезть в подобную дрянь", не ходи в ботинках, впрочем, как и в любой другой современной обуви
Другого способа нет.


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


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



А как насчет бега на короткие дистанции?????
Вопрос не в том, что нет желания зайти в магазин, я как бы ими пользуюсь когда считаю нужным, но не сильно хочется вешать кучу соплей на обувь из-за простого нешнурования.... задача состоит в том, чтоб одеть, но коль уж нет быстрого решения, а нужно лишь цеплять что-то на ноги, тогда проще оперерировать с подошвой и каблуками, хотя и потеряю пару 10^6 сапожных гвоздей, а что делать



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



воспользовался сапогами, работает, причем так как хотелось... до пивного ларька добегаю быстрее, чем пиво "подходит к концу"
всем спасибо за помощь!!!! :D


Может я, конечно, и хуже тебя знаю тонкости Си, но это не значит что так будет всегда - это раз.
Мне незачем использовать уже кем написаное, то что я пишу, не для продажи и подобного, когда я катаю на заказ, то использую уже готовое, тогда можно - это два.
Вопрос задал, чтобы более полно постигнуть все тонкости, и понять фундамент на котором все было построено, а не заниматься плагиатом, когда хочу чему нибудь научиться - это три.
И последнее - ты хоть и ветиран, но, по ходу, ДИБИЛ полный... и пусть меня после этого забанят, но если люди не могут дать овет на вопрос, то зачем его тут тогда задавать??????????????

842
06 марта 2009 года
sigmov
301 / / 16.09.2008
Цитата:
[QUOTE]Сообщение от Green ....

.... И последнее - ты хоть и ветиран, но, по ходу, ДИБИЛ полный... и пусть меня после этого забанят[/QUOTE]
Зря вы так - Green нормальный программист. Правда иногда ему кажется что он Гейтс№2 и он является склонным к флуду - но в целом его советы бывают иногда дельными и способными навести на мысль.

92
06 марта 2009 года
Тень Пса
2.2K / / 19.10.2006
хе... мммде ) такие наезды прям )

тов. Green оч. хорошо наталкивает на "а башкой падумат да?!", поэтому Ваши комменты, господа, чутка неуместны ) тем более в сторону пенсионера =) как Вам не стыдно?! :)
240
06 марта 2009 года
aks
2.5K / / 14.07.2006
Цитата: metrA
но если люди не могут дать овет на вопрос, то зачем его тут тогда задавать??????????????


Да, вот это повеселило. Забанить и правда стоит. ))

Цитата: sigmov
Правда иногда ему кажется что он Гейтс№2


Ну да, Гейтс конечно эталон программиста. )

А вот автору лучшеб задуматься стоило, а не в позу вставать. )

255
06 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
Самое прикольное в этом всём, что аффтар топика выбрал самое унылое решение.
87
06 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: metrA
Мне незачем использовать уже кем написаное, то что я пишу, не для продажи и подобного, когда я катаю на заказ, то использую уже готовое, тогда можно - это два.


Как-то странно тут знаки препинания расставлены. Смысл трудно уловить. Примерно так же, как и в случае с 10^6 тактами...

Цитата: metrA
Вопрос задал, чтобы более полно постигнуть все тонкости, и понять фундамент на котором все было построено, а не заниматься плагиатом, когда хочу чему нибудь научиться - это три.


STL - это часть языка C++. Никто не обладает правами на язык Си++, он является свободным. В чем плагиат?

Цитата: metrA
зачем его тут тогда задавать??????????????


Обилие вопросительных или восклицательных знаков в конце предложения - это дурной тон. Я бы не рекомендовал такой стиль людям, которые хотят выглядеть адекватными.

255
06 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
Да ладно народ, успокойтесь. Обычный форумный тролль. Ему никто ничего не докажет ;)

Как любит говорить один мой знакомый: "Никогда не спорьте с идиотом. Споря с ним вы опускаетесь до его уровня, а там он задавит вас своим опытом"
43K
06 марта 2009 года
metrA
15 / / 03.03.2009
...каюсь, критика в мою сторону логична и оправдана, кого оскорбил или задел, прошу прощения - вспылил. Просто понимаете, есть конечно уже наработанное, проверенное временем, но мне хочется понять как то что уже есть писалось, на чем оно основано. Ведь когда писали STL, я так понимаю, использовали низкоуровневый доступ, или другие способы но далеко не этот самый STL, мне просто хочется понять, а не переписывать.
P.S.
10^6 = 1000000 - обычная запись степени, скажем в Maple применяется.
Плагиат - не то что ворую, а просто не хочется повторять, коль можно попытаться понять как ОНОЕ работает.
ОСОБО прошу прощения у Green!
87
06 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: metrA
Ведь когда писали STL, я так понимаю, использовали низкоуровневый доступ, или другие способы но далеко не этот самый STL, мне просто хочется понять, а не переписывать.


Я думаю, вы хотите обмануть сами себя. Изначально вам надо было добавить элемент к массиву. Надо и решать эту задачу, а не что-то другое придумывать на ходу.

Цитата: metrA
10^6 = 1000000 - обычная запись степени, скажем в Maple применяется.


Это понятно. Непонятно на что потребуется эти такты потратить, так как стиль изложения там путанный.

255
06 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: metrA
...каюсь, критика в мою сторону логична и оправдана, кого оскорбил или задел, прошу прощения - вспылил. Просто понимаете, есть конечно уже наработанное, проверенное временем, но мне хочется понять как то что уже есть писалось, на чем оно основано. Ведь когда писали STL, я так понимаю, использовали низкоуровневый доступ, или другие способы но далеко не этот самый STL, мне просто хочется понять, а не переписывать.


Вы хоть представляете, сколько времени экономит STL при написании проекта?
Кстати, можете вбить в гугл что-то вроди "malloc new" и почитать о С-стиле в С++, и его явных недостатках. Может после этого поймете, что realloc - унылое решение.
STL - совершенно другая концепция, причем грамотно реализованая, и годами отточеная (проверенная временем, куда лучше чем ваше наработаное). И высказывание "прочая дрянь" для STL просто несправедливо.

З.Ы. Больше от комментов воздержусь пока автор не станет более адекватным и не станет прислушиваться к советам более опытных форумчан.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог