- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
#include <memory>
#include <list>
struct ListNode;
using List = std::unique_ptr<const ListNode>;
struct ListNode {
const int data;
const List next;
~ListNode()
{
if(!next)
return;
else {
std::list<ListNode*> nodes;
for(auto pn = next.get(); pn->next; pn = pn->next.get()) {
nodes.push_back(const_cast<ListNode*>(pn));
}
for(decltype(nodes)::reverse_iterator in = nodes.rbegin(); in != nodes.rend(); ++in) {
const_cast<List&>((*in)->next).reset();
}
}
}
};
List Cons(int head, List tail)
{
return List(new ListNode{head, std::move(tail)});
}
List Nil()
{
return List();
}
size_t len(const List & self)
{
if (!self) {
return 0;
}
return 1 + len(self->next);
}
#include <iostream>
void test(size_t n)
{
auto p = Nil();
for (size_t i = 0; i < n; ++i) {
auto x = std::move(p);
p = Cons(1, std::move(x));
}
std::cout << "done: " << std::endl;
}
int main()
{
test(131028);
}
defecate-plusplus 22.09.2015 10:33 # +1
gost 22.09.2015 12:27 # 0
CHayT 22.09.2015 12:40 # +1
самое забавное, что это поциент высрал после того, как два дня всем доказывал, что у гц огромный оверхед
kegdan 22.09.2015 12:57 # +2
TarasB 23.09.2015 14:55 # 0
CHayT 23.09.2015 15:01 # 0
ну да, в таком мире и правда всё плохо
3_14dar 23.09.2015 15:04 # +1
Это что такое?
CHayT 23.09.2015 15:34 # +5
3_14dar 23.09.2015 18:58 # +1
Это по русски, пидар, пидар, пидар????
TarasB 23.09.2015 15:08 # +1
Компактизирующих гц не бывает в фантазии тех, у кого удаление бесплатное.
"Его" говнокод - не его, это он допилил как есть чужой говнокод.
CHayT 23.09.2015 15:29 # +1
время требуется для сканирования стеков, да на компактизацию достижимых объектов
> "Его" говнокод - не его, это он допилил как есть чужой говнокод.
создание второго списка(!) для удаления первого -- его изобретение
оверхед любого самого задрипанного гц будет по всем параметрам меньше, чем у этого лютого говна
kegdan 23.09.2015 15:33 # 0
Модно кричать что гц - говно. А писать хороший код - не модно. Что это за хуйня, действительно! Люди вон уже ложку для селфи придумали, а вы - писать хороший код. нонсенс!
imihajlov 23.09.2015 17:52 # 0
bormand 23.09.2015 17:52 # +2
kegdan 23.09.2015 18:20 # 0
TarasB 23.09.2015 15:35 # +1
И чо, и чо? Он показал, как эту хрень удалить без рекурсии. Решение - влобное, первое попавшееся. И ещё он в курсе про то, что это говно и что в стд существует форвард_лист.
> да, удаление бесплатное, выделение памяти тоже
Я тоже так могу: в С++ удаление и выделение тоже бесплатные, время требуется только для упорядочивания аллокатора.
CHayT 23.09.2015 17:45 # 0
TarasB 24.09.2015 10:43 # −1
CHayT 24.09.2015 11:15 # +1
а аллокатор стоит рядом и улыбается как идиот:
в итоге имеем сто дырок по sizeof(int)*1000 байт
если после этого попытаться выделить памяти на MEM_MAX-sizeof(int)*1000, получим кукиш
а компактизирующий гц пошуршит, но выделит
CHayT 24.09.2015 11:24 # 0
TarasB 24.09.2015 15:38 # −1
Если я в жабке буду много раз либо выделять случайное количество памяти, либо ээээ... забывать случайный блок из ранее выделенных, то жор памяти будет расти, пока оператива не закончится, и дырки так и будут зиять, пока гэцэшэчка не соизволит прибраться.
j123123 05.02.2017 09:01 # +1
и любое обращение к массивам, выделение/освобождение памяти пусть идет через эту питушню
А потом вот если надо что-то записать/прочитать в такую myshittymalloc-нутую память, надо херачить вот такой сорт говна
и в этом говне читается хрень из fucingpointers[a[1]]. Т.е. сырые указатели на хип живут только в этом fucingpointers говномассиве
Отака хуйня, малята. И теперь если как-нибудь сильно изосрать память, чтобы там были дыры, и выделение памяти от этого обделывается, можно запускать особую хрень, которая уже пробегается по всему этому fucingpointers[dofiga] и переутрамбовывает(дефрагментирует) это все плотным куском, чтоб без дыр, при этом патча все эти адреса из массива fucingpointers.
bormand 23.09.2015 17:51 # 0
bormand 23.09.2015 17:55 # +1
Ну тогда:
CHayT 23.09.2015 20:06 # 0
и это ты называешь "без рекурсии"?
bormand 23.09.2015 20:56 # +2
TarasB 24.09.2015 10:43 # −1
Ты до сих пор походу не догоняешь разницу между "код для примера" и "рабочий код".
3.14159265 24.09.2015 12:33 # 0
Хе-хе-хе. Помню даже где-то обсуждали сортировку с O лучше теоретического, сложность уходила именно в алокатор.
TarasB 24.09.2015 15:39 # 0
bool realloc_inplace (void* ptr)
который можно использовать в контейнерах, угадайте, что он делает.
Да, а стандартный realloc - дерьмо.
3.14159265 24.09.2015 16:36 # 0
И как он дружит с многопоточностью? Хотел зеленым, но не буду.
TarasB 24.09.2015 16:50 # −1
bormand 25.09.2015 06:01 # 0
guest 25.09.2015 10:35 # 0
1024-- 25.09.2015 10:47 # 0
> Borm And!
borm & 5 часов назад
kegdan 25.09.2015 12:09 # +4
kegdan 25.09.2015 12:14 # 0
В юникоде B | m = o
так что
o& 5 часов назад
CHayT 25.09.2015 10:54 # 0
bormand 24.09.2015 17:50 # 0
Кстати, в том же dlmalloc тоже есть dlrealloc_in_place :)
realloc_in_place(void* p, size_t n)
Resizes the space allocated for p to size n, only if this can be done without moving p (i.e., only if there is adjacent space available if n is greater than p's current allocated size, or n is less than or equal to p's size).
roman-kashitsyn 22.09.2015 14:51 # 0
ну и вообще говоря, односвязные списки я в плюсах в последний раз использовал примерно никогда.
kegdan 22.09.2015 16:38 # +2
bormand 22.09.2015 18:45 # +2
kegdan 22.09.2015 18:53 # 0
bormand 22.09.2015 18:57 # +2
Ну можно ещё разность, но там обход в разные стороны по-разному будет выглядеть. Неудобно.
kegdan 22.09.2015 19:09 # 0
bormand 22.09.2015 19:13 # 0
kegdan 22.09.2015 19:14 # 0
guest 22.01.2016 02:14 # 0
3_14dar 22.09.2015 19:08 # −1
Xom94ok 22.09.2015 20:02 # 0
kegdan 22.09.2015 20:27 # +6
CHayT 22.09.2015 20:40 # 0
3_14dar 22.09.2015 20:46 # −2
kegdan 22.09.2015 20:51 # +3
3_14dar 22.09.2015 21:29 # −2
bormand 22.09.2015 22:12 # 0
CHayT 22.09.2015 22:13 # 0
HiNeX 22.09.2015 22:25 # 0
bormand 22.09.2015 22:26 # 0
gost 27.09.2015 18:34 # +1
3_14dar 27.09.2015 19:20 # 0
gost 28.09.2015 00:16 # 0
3_14dar 28.09.2015 00:18 # 0
gost 28.09.2015 00:27 # 0
3_14dar 28.09.2015 01:37 # +2
kegdan 22.09.2015 23:06 # 0
http://www.youtube.com/watch?v=BL68Sp-4Dqs
defecate-plusplus 23.09.2015 00:38 # 0
https://www.youtube.com/watch?v=koovuH7zX48
kegdan 23.09.2015 08:18 # 0
p.s. slayer - нормальная группа.
bormand 22.09.2015 18:44 # 0
3_dar 23.09.2015 22:16 # 0
kegdan 24.09.2015 08:01 # −1
3_14dar 25.09.2015 02:25 # +2
guest 22.01.2016 02:14 # 0
guest 22.01.2016 02:28 # 0
остается только добавить что-нить по теме:
есть знакомый упоротый чувак и он тащит хаскилизмы в кресты:
http://bartoszmilewski.com/2013/11/13/functional-data-structures-in-c-lists/
https://www.fpcomplete.com/blog/2012/06/asynchronous-api-in-c-and-the-continuation-monad
http://bartoszmilewski.com/2015/05/25/using-monads-in-c-to-solve-constraints-4-refactoring/
и тому подобное в
https://plus.google.com/u/0/+BartoszMilewski/posts
guest 06.01.2017 17:27 # 0
------
<a href=http://ledpolice.ru>защита человека</a> | http://ledpolice.ru
guest 10.01.2017 02:15 # −1
barop 12.01.2017 02:00 # 0
Хава нагила
Хава
guest 14.01.2017 15:46 # 0
barop 14.01.2017 16:02 # 0
https://ok.ru/group/51823935029317
guest 14.01.2017 17:40 # 0
barop 14.01.2017 17:48 # 0
guest 14.01.2017 18:05 # +1
barop 14.01.2017 18:11 # 0
bormand 14.01.2017 18:46 # +2
Асуну?
barop 14.01.2017 18:51 # +2
Средний азий рядом
Есть бойсовый питух ?
guest 14.01.2017 18:55 # 0
guest 14.01.2017 19:09 # 0
> Проблема в том, что такая работа с памятью в контексте современных процессоров с многоуровневым кэшем и SMP нифига не оптимальна
Лолшто? Океания всегда воевала с остазией? Гц же был, когда о кэшах еще никто и не думал.
guest 14.01.2017 19:20 # −1
Так он не джавист, он просто говнокодер. Больно мне за профессию.
huge_cock 14.01.2017 19:23 # 0
guest 14.01.2017 19:33 # 0