|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Roman MejtesDima TПотому и жрет, т.к. каждый результат это новый массив. что за бред, Linq работает с Enumerator'ом и ни какие массивы не возвращает. только перечисление. Верно, не совсем правильно написал, но чтобы перечисление превратить в массив, как ТС хочет, то надо ToArray(), т.е. новый массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:48 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinwinsky!ага. смотря с чем сравнивать, если монтулить свой лист, то не жрет :Dтам же как-то можно память напрямую обрезать... Можно не копировать, а использовать часть исходного массива. Если обрезание тебе надо из-за того что "Out of memory" выходит, то переделывай свой массив на массив массивов, т.е. не один на > int.MaxValue элементов, а например 16, а вокруг обертку которая эти 16 выдаст за один. Ты бы поподробнее написал в чем конкретно проблема. PS winsky! правильно написал "пихать такое в один массив ..." это уже ненормально, сегодня массив у тебя на пределе, а завтра чуть больше станет инфы и начнет вылетать при создании массива. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:54 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
А тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:54 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinА тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект? Он создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:59 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TPS winsky! правильно написал "пихать такое в один массив ..." это уже ненормально, сегодня массив у тебя на пределе, а завтра чуть больше станет инфы и начнет вылетать при создании массива. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например.Это задачка, к практике никакого отношения... Задача, можно на C# решатьЗадача – написать функцию (С++) для удаления из массива чисел типа “uint32_t” значений, удовлетворяющих некоторому условию. Массив представлен указателем на элементы типа “uint32_t”, причём значение первого – это количество значений в массиве. То есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет таким: 2,1,3. Предложите, как минимум три возможных варианта решения, проанализируйте каждое из них, выберите лучшее для различных условий применения: ограниченная память ограниченная производительность процессора многопоточность – необходимость чтения массива из нескольких параллельных потоков во время удаления элементовЗадача – написать функцию (С++) для удаления из массива чисел типа “uint32_t” значений, удовлетворяющих некоторому условию. Массив представлен указателем на элементы типа “uint32_t”, причём значение первого – это количество значений в массиве. То есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет таким: 2,1,3. Предложите, как минимум три возможных варианта решения, проанализируйте каждое из них, выберите лучшее для различных условий применения: ограниченная память ограниченная производительность процессора многопоточность – необходимость чтения массива из нескольких параллельных потоков во время удаления элементов ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:00 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например. Задача то неизвестна.... мож MemoryMappedFile спасёт - там всё int64 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:01 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TОн создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются.ответ очевиден, действительно тупой вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:06 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
те решается пункт с маленькой памятью... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:08 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinте решается пункт с маленькой памятью... первым проходом - подсчитать размер нового массива, создать новый нужного размера, вторым - скопировать, исходный массив - освободить ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:17 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропилпервым проходом - подсчитать размер нового массива, создать новый нужного размера, вторым - скопировать, исходный массив - освободитья же первым же проходом: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:21 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinте решается пункт с маленькой памятью... Задание перечитай авторТо есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет таким: 2,1,3. тут все тупо и просто, переносишь все нужные значения в начало массива и в нулевой элемент пишешь их количество. Не тот ЯП ты выбрал, там же написано С++ и указатели, а в С++ нет размера массива, есть указатель на начало и отдельно размер. А смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть. И ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:22 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
кстати, уже на 0,5 ярде возникает исключение((( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:28 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:31 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TИ ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю.на ноуте не даёт, а на стационаре (32Г оперативки) дал... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:34 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinDima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#? что сделать? по индексу 0 - поместить новое значение длины, память останется занятой. нужно отдать память - только копирование (явное иди неявное) и похер c# или C ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:36 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinна ноуте не даёт, а на стационаре (32Г оперативки) дал... не уверен, что учебное задание понято правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:36 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропилv skopinпропущено... А как это сделать в с#? что сделать? по индексу 0 - поместить новое значение длины, память останется занятой. нужно отдать память - только копирование (явное иди неявное) и похер c# или C те было бы решением: Код: c# 1. 2. 3. 4. 5.
И ВСЁ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:44 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
неужели нельзя никак хвост выкинуть??? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:45 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinнеужели нельзя никак хвост выкинуть??? нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:49 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
ладно, спасибо всем! ясно всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 19:27 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропил и похер c# или C Не похер, точнее похер в рамках ТЗ где выбор С# или C++, а в С есть realloc() но это к теме не относиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:03 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T, Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:14 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
ИзопропилDima T, Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти Может вызвать, а может не вызвать. Не факт что realloc() на каком-нибудь девайсе с кастрированной памятью будет раскидываться ею как c#. Вобщем от рантайма все зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:23 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T, Не "раскидываться" памятью, а бороться с фрагментацией Фрагментация с# тож касается ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:32 |
|
|
start [/forum/topic.php?fid=20&msg=39283094&tid=1400429]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 160ms |
0 / 0 |