Как стать автором
Обновить

Комментарии 28

Что мы получили кроме дикого оверхеда?

Что это за бред вообще? Проба GPT-3? Надмозг?

Меня больше интересует другое: аккаунт создан 3 октября 2012 г., последняя активность 04.06.2021, ни одной публикации или комментария. И тут опа: и публикация. Такое вообще бывает?

Вопрос в том, как долго статья была в песочнице.

Наткнулся кто-то на эту статью и решил пригласить.

Учитывая что подпись автора говорит, что он разработчик DL и NLP, то вполне вероятно так и есть)

если знать, как работают внутренности C на низком уровне

... то можно воспользоваться mmap(MAP_ANONYMOUS) или там VirtualAlloc(). malloc же берет память где-то?

Еще есть sbrk

Есть, но им лучше не пользоваться.

НЛО прилетело и опубликовало эту надпись здесь

сам sbrk ничего не выделяет, а сдвигает границу адресного пространства кучи, доступной процессусам sbrk ничего не выделяет, а сдвигает границу адресного пространства кучи, доступной процессу

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

В ручном управлении памятью, выделение один раз и дальше самостоятелтьно внутри куска.

НЛО прилетело и опубликовало эту надпись здесь

Так речь же о том, что без malloc обойтись. А остальные детали в данном случае не интересны.


Ну то есть вместо выделения куска памяти в куче с помощью malloc (или его собственной реализации) просто инкрементируем указатель на память.

НЛО прилетело и опубликовало эту надпись здесь

Ну аффтар же сказал "без кучи". Без кучи единственный вариант рекурсия. Так себе троллинг впрочем ...

alloca есть как минимум

Выделение памяти через mmap() не имеет прямого отношения к куче. То есть, конечно, можно в выделенной памяти потом завести heap allocator, но ведь можно и не заводить.

Так С или плюсы?

Ничего, что под массивом в мире С/С++ понимается непрерывный участок памяти, а список - это другое? И одно второе не заменяет.

НЛО прилетело и опубликовало эту надпись здесь

Чтобы идея стала законченной, можно все тоже сделать, но без циклов?

Не хватает коментария от автора: извините, меня взломали.

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

Я тут перед собеседованиями заново проштудировал структуры данных и алгоритмы, и понял, что основательно их подзабыл :(

1. Прочитайте, что такое массив. // Тут не выполняется даже доступа по индексу за O(1).
2. Прочитайте, что происходит со стеком после завершения функции. // Скорее всего, данные там останутся, но вызов функции перетрёт значения.

В целом пост, конечно, безграмотный, как и было сказано в предыдущих комментариях. Но есть в нём одна разумная мысль:

Списки, в отличие от массивов, не владеют элементами. Список это, скорее, способ упорядочивания относительно независимых наборов данных. Поэтому элементы списка могут иметь разный размер и выделяться где угодно, в частности, на стеке. Главное - гарантировать удаление элемента из списка до того, как будет удалён "носитель".

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

Массив и отличается от списка хотя бы тем, что доступ к любому элементу требует одинакового времени - адрес нулевого элемента плюс номер умножить на размер элемента (сори за банальность). У вас список с оператором индексации.
Ну и не совсем в тему, но VLA есть в C99, например.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории