Comments 28
Что мы получили кроме дикого оверхеда?
Что это за бред вообще? Проба GPT-3? Надмозг?
Меня больше интересует другое: аккаунт создан 3 октября 2012 г., последняя активность 04.06.2021, ни одной публикации или комментария. И тут опа: и публикация. Такое вообще бывает?
Учитывая что подпись автора говорит, что он разработчик DL и NLP, то вполне вероятно так и есть)
если знать, как работают внутренности C на низком уровне
... то можно воспользоваться mmap(MAP_ANONYMOUS) или там VirtualAlloc(). malloc же берет память где-то?
Еще есть sbrk
Есть, но им лучше не пользоваться.
сам sbrk ничего не выделяет, а сдвигает границу адресного пространства кучи, доступной процессусам sbrk ничего не выделяет, а сдвигает границу адресного пространства кучи, доступной процессу
... что впринципе и является выделением памяти, ведь мы получаем больше виртуальных адресов для использования.
В линуксе вниз граница не двигается, в этом смысле предпочтительнее ммап- выделенную им память можно отдать обратно ос.
Можно рассмотреть вырожденный случай кучи, когда память только выделяется, но не освобождается.
В ручном управлении памятью, выделение один раз и дальше самостоятелтьно внутри куска.
Так речь же о том, что без malloc обойтись. А остальные детали в данном случае не интересны.
Ну то есть вместо выделения куска памяти в куче с помощью malloc (или его собственной реализации) просто инкрементируем указатель на память.
Ну аффтар же сказал "без кучи". Без кучи единственный вариант рекурсия. Так себе троллинг впрочем ...
Так С или плюсы?
Ничего, что под массивом в мире С/С++ понимается непрерывный участок памяти, а список - это другое? И одно второе не заменяет.
Чтобы идея стала законченной, можно все тоже сделать, но без циклов?
Не хватает коментария от автора: извините, меня взломали.
Мда... мне кажется, что автору стоит подучить структуры данных и алгоритмы, хотя бы базовые вещи.
Я тут перед собеседованиями заново проштудировал структуры данных и алгоритмы, и понял, что основательно их подзабыл :(
2. Прочитайте, что происходит со стеком после завершения функции. // Скорее всего, данные там останутся, но вызов функции перетрёт значения.
В целом пост, конечно, безграмотный, как и было сказано в предыдущих комментариях. Но есть в нём одна разумная мысль:
Списки, в отличие от массивов, не владеют элементами. Список это, скорее, способ упорядочивания относительно независимых наборов данных. Поэтому элементы списка могут иметь разный размер и выделяться где угодно, в частности, на стеке. Главное - гарантировать удаление элемента из списка до того, как будет удалён "носитель".
Лично я использую выделение отдельных элементов списка на стеке довольно регулярно, особенно в многопоточных алгоритмах.
Массив и отличается от списка хотя бы тем, что доступ к любому элементу требует одинакового времени - адрес нулевого элемента плюс номер умножить на размер элемента (сори за банальность). У вас список с оператором индексации.
Ну и не совсем в тему, но VLA есть в C99, например.
Разминка мозгов: свой массив на c++ без malloc