Russian Qt Forum

Qt => Model-View (MV) => Тема начата: __Heaven__ от Ноябрь 13, 2014, 19:10



Название: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 13, 2014, 19:10
Привет, друзья!
Создал свою табличную модель. Маленькие объёмы обрабатывает хорошо. А вот с большими происходит выброс.
Код
C++ (Qt)
   tbl = new TableModel(this);
   tbl->setColumnCount(ui->columnsSpn->value());
   tbl->setInputData(rawData);     //QByteArray
   tbl->setBeginAddress(rawPos);
   ui->rawTbl->setModel(tbl);
 
На каждую функцию модели я повесил qDebug
Подскажите, пожалуйста, почему у меня выскакивает ошибка. Точнее, какие пределы по строкам в таблице? Или как оптимизировать таблицу.
Цитировать
constructor
setColumnCount
"setInputData. dataSize 33789290"
setColumnCount
setBeginAddress
"rowCount. returned 33789290"
"columnCount. returned 1"
"rowCount. returned 33789290"
"columnCount. returned 1"
"rowCount. returned 33789290"
"columnCount. returned 1"
"rowCount. returned 33789290"
In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 489: Out of memory
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: gil9red от Ноябрь 13, 2014, 19:32
Обычно очень много данных хранят в какой-нибудь БД и предоставляют доступ с помощью SQL model (http://qt-project.org/doc/qt-4.8/sql-model.html) :)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 13, 2014, 19:50
Обычно очень много данных хранят в какой-нибудь БД и предоставляют доступ с помощью SQL model (http://qt-project.org/doc/qt-4.8/sql-model.html) :)

Данные хранятся в файле. Как-то менять этот файл нельзя. Можно создавать временные файлы.
Конечная цель: вывести в таблицу полученный массив char. Количество колонок определяет пользователь.
С базами опыта на qt не имел. Как прикрутить мою задачу к этому классу не понимаю.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 13, 2014, 20:06
Ок. Допустим, я во временный файл запишу базу sqlite. Есть ли гарантия того, что таблица сумеет вывести мне все значения?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Bepec от Ноябрь 13, 2014, 23:38
Никогда ни 1 человеку не понадобятся все данные :)
Это заблуждение. Потому надо давать маленькими частями и организовать ленивую загрузку :)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 14, 2014, 07:57
Никогда ни 1 человеку не понадобятся все данные :)
Это заблуждение. Потому надо давать маленькими частями и организовать ленивую загрузку :)
Согласен.
Что вы имели в виду под "давать маленькими порциями"? Это подразумевает дополнительные действия от пользователя?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Авварон от Ноябрь 14, 2014, 11:30
33 ляма строк - это не так много. скорее всего, проблема в том, что вы сами данные храните в векторе. Тогда надо выделить сплошной кусок памяти размера 33ляма умножить на размер структуры. Если заменить вектор структур на вектор указателей на структуры, памяти потребуется больше, но не одним куском. Можно просто заменить вектор на кулист, он уже использует указатели на данные.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 14, 2014, 11:48
33 ляма строк - это не так много. скорее всего, проблема в том, что вы сами данные храните в векторе. Тогда надо выделить сплошной кусок памяти размера 33ляма умножить на размер структуры. Если заменить вектор структур на вектор указателей на структуры, памяти потребуется больше, но не одним куском. Можно просто заменить вектор на кулист, он уже использует указатели на данные.
Судя по сигнатуре и по наличию вектора, в качестве модели используется QStandardItemModel, а она не предназначена для большого количества данных.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 14, 2014, 14:23
Мои данные хранятся в QByteArray.
Этот массив выводится в таблицу. По одному значению в ячейку.
Если колонок в таблице сделать 5, то вылета не будет.
Наследуюсь от QAbstractTableModel


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 14, 2014, 14:28
Тебе проще сделать минимальный компилябельный пример, а мы его посмотрим и поможем. ;)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 15, 2014, 02:19
Вот (см. аттач)
цифру можно указать и меньшую, ели добавить какую-нибудь информацию в методы data и headerData.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 09:22
Может, 990000000 слишком много? :) Убрал один 0 и все заработало. А так, падало где-то внутрях байтаррея.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 09:27
Может, 990000000 слишком много? :) Убрал один 0 и все заработало. А так, падало где-то внутрях байтаррея.

Эээх :)
Придётся модифицировать свой пример, чтобы показать проблему (даже без последнего ноля)...


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 09:28
Скорее всего, ибо тут эта проблема не воспроизводится.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Bepec от Ноябрь 17, 2014, 10:00
Пользователю нужно максимум 900 строк на экране. Именно их вы и должны хранить в программе.
Остальное должно лежать допустим в базе данных и запрашивать по требования.

Допускается так же 900 строк вверх и 900 строк вниз от имеющихся для "плавной" прокрутки.

PS Вылетает скорее всего изза предела в 2 Гб для x32 программы.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 11:14
PS Вылетает скорее всего изза предела в 2 Гб для x32 программы.

В точку по поводу x32. Но насчёт 2 Гб - не знаю как устроены классы, но потребление в аттаче
Откомпилировал свой проект под msvc 2013 с Qt 5.3.1 opengl 64 и мой большой файл открылся без проблем. К сожалению нет возможности проверить работу при msvc x32 компиляторе. Но, думаю, что там будет то же.

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



Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 11:23
В 32 архитектуре процессу доступно только 2 GB оперативы. Я тоже склоняюсь, что проблема в этом.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Old от Ноябрь 17, 2014, 11:28
В 32 архитектуре процессу доступно только 2 GB оперативы.
Под вендой.
В linux - 3 Gb.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 11:29
В 32 архитектуре процессу доступно только 2 GB оперативы.
Под вендой.
В linux - 3 Gb.
Да, забыл уточнить. Спасибо. :)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 11:32
Спасибо за ответы.
Немного стыдно, что не знал про 2ГБ. Я был уверен, что выделяется до 4ГБ, если приложение запустить из-под x64


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 11:47
А как отлавливать такие исключения? Куда цеплять try?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Bepec от Ноябрь 17, 2014, 11:50
Под виндой это довольно запутанно и сложно :D

Имеется вроде бы блок для ловли таких вот гадостей в __try.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 11:51
ИМХО, под виндой такое сложно отловить. Нужно изначально разрабатывать, чтобы не превышать лимитов.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 14:14
ИМХО, под виндой такое сложно отловить. Нужно изначально разрабатывать, чтобы не превышать лимитов.

Так понимаю, лимиты подбираются на ощупь в моем случае.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 14:15
А еще интересно вот что!
Если я беру этот же массив и вывожу не в одну колонку, а в 3, то ошибка не выскакивает.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 14:16
ИМХО, под виндой такое сложно отловить. Нужно изначально разрабатывать, чтобы не превышать лимитов.

Так понимаю, лимиты подбираются на ощупь в моем случае.
Ну, смотри, Куьют из скулайтной базы подтягивает данные по 256 строк. Можешь так примерно и сделать. Пользователю не нужно видеть мульоны строк, ему нужно 100 +- 50 максимум. А дальше можно отфильтровать.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 14:50
Можешь так примерно и сделать. Пользователю не нужно видеть мульоны строк, ему нужно 100 +- 50 максимум. А дальше можно отфильтровать.

Как при этом должен работать скроллбар? Если я захочу потянуть за него?
Он должен просто иметь 3 положения: верх, низ и середина?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 15:00
Хм. По-идее, можно размер передавать реальный, а вот в памяти держать только нужные данные. Вьюха не запрашивает данные для ячеек, которые не видны. Исключением будет если ты пытаешься сделать ресайз колонок под содержимое - тогда делается пробег по всем значениям.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 15:25
Хм. По-идее, можно размер передавать реальный, а вот в памяти держать только нужные данные. Вьюха не запрашивает данные для ячеек, которые не видны. Исключением будет если ты пытаешься сделать ресайз колонок под содержимое - тогда делается пробег по всем значениям.

У меня 5.3 и вьюха, как мне кажется, делает пробег по всем колонкам/строкам (скрытым и отображенным). Более того, она делает это мультипоточно.

Одни и теже данные я пытаюсь отобразить в 3 колонки, а затем в 1. Ничего не меняю в памяти кроме nColumns и nRows.
При отображении в 3 все ок. А при отображении в 1 выброс.
Также я вешал на методы data, headerData функцию qDebug(). Она вызывалась много большее число раз, чем строк имеется в отображении.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 15:27
Прокси?
Ресайз политика колонок/строк?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 15:31
Прокси?
Ресайз политика колонок/строк?
Использую QTableView с настройками по умолчанию


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 15:33
Можешь сам проверить - в тестовом своем примере замени:
Код
C++ (Qt)
QVariant data(const QModelIndex &index, int role) const{static int i = 0; i = qMax(i, index.row ()); return (role == Qt::DisplayRole) ? QString::number (i): QVariant();}
 
и увидишь, что там появится номер для видимых ячеек (ну, возможно, плюс еще парочка). А вот если в main сделать:

Код
C++ (Qt)
w.show();
w.resizeColumnsToContents ();
 
То увидишь максимальное количество строк.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 16:26
Не понимаю, в чём дело...
Сделал в своем примере
Код
C++ (Qt)
   QVariant data(const QModelIndex &index, int role) const
   {
       static int i = 0;
       if (role == Qt::DisplayRole)
       {
           qDebug() << ++i;
           return i;
       }
       return QVariant();
   }
 
Да. убедился, что все именно так.
А когда вставил это же в свой проект и при открытии большого файла получил такое:
Цитировать
60
In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 489: Out of memory
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Если что, первые 60 qDebug() относятся к другой mv


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 17, 2014, 16:27
Значит проблема в чем-то еще.
Покажи свой метод data.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 17, 2014, 16:46
Код
C++ (Qt)
   if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole))
       return QVariant();
 
   int id = index.row() * nColumns + index.column();
   int arrayOffset = id * typeSize[type] + offset;
   if (arrayOffset + typeSize[type] > dataArray->size())
       return QVariant();
 
   const char* pointer = static_cast<const char*>(dataPtr) + arrayOffset;
 
   switch (type)
   {
   case Hex:
       return QString("%1").arg(reinterpret_cast<const uchar*>(pointer)[0], 2, 16, QChar('0')).toUpper();
   ....
   return QVariant();
 

В качестве типа приходит Hex


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 09:36
typeSize[type] - тут нет выхода за пределы массива?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:24
нет. это хэш, который принимает перечисление.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 10:27
Я бы на твоем месте начал с проверки корректности вычисления id и arrayOffset.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:29
Да с ними всё в порядке. Маленькие файлы открываются хорошо. Этот большой, на котором вылет происходит, тоже хорошо, но только с выводом минимум в три колонки. Значения, которые выводятся в таблице я все вручную проверял.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 10:34
А размер QByteArray какой на этом файле?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:47
"rowCount. returned 33789290"

Это и есть размер массива.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 10:50
32 МБ многовато. Возможно, QByteArray просто переполняется. Попробуй не закачивать файл в оперативку, а замаппить его. Или хранить только часть и подтягивать данные, если они понадобились.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 10:52
Еще есть предположение - QByteArray хранит данные единым блоком, поэтому, если блок не получается выделить, будет сбой. Если приложение (32 битное) даже не ест все 2 гига, есть такая вещь, как фрагментация памяти.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:52
Грубо говоря нереально открыть файл размером около 250Мб и вывести в колонку его хекс значения по байтам.
Я с этим сталкивался и в другой задаче.

32 МБ многовато. Возможно, QByteArray просто переполняется. Попробуй не закачивать файл в оперативку, а замаппить его. Или хранить только часть и подтягивать данные, если они понадобились.
если я закомментирую строчку привязки модели к вьюхе, то QByteArray справляется. Даже метод QFile::readAll читает файлы до 250Мб и возвращает QByteArray.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 10:56
Сейчас посмотрел в хирер qvector.h - та строчка относится к реалоку. то есть, у тебя какое-то перераспределение памяти, на котором происходит падение...

type ты откуда берешь? Что-нибудь еще изменяется в методе data?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:56
Этот большой, на котором вылет происходит, тоже хорошо, но только с выводом минимум в три колонки.

При наличии большего числа колонок (что уменьшает количество строк. в данном случае втрое) предотвращает ошибку. Это дает право сказать, что QByteArray тут не при чем


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:57
Сейчас посмотрел в хирер qvector.h - та строчка относится к реалоку. то есть, у тебя какое-то перераспределение памяти, на котором происходит падение...
Нехватка памяти, полагаю
In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 489: Out of memory


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 10:58
Сама вьюха тоже, наверное, на векторах стоит


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 11:01
Попробуй еще утечки поискать памяти.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 11:09
Попробуй еще утечки поискать памяти.

Визуально я это проделал. И моё эго подсказывает, что я очень щепетильно расходую память :)
Специальным софтом ни разу не пользовался. Посоветуете бесплатную? (Работаю в QtCreator, но есть и MSVS 2013 x64)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 11:13
valgrind, но это только под Линухом.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 11:33
valgrind, но это только под Линухом.

Жаль. Мне линукс ставить отказываются (как и vm), а дома не вариант.

Мне повезло повторить ошибку в минимально компилябельном примере (см. аттач)!
Всё что нужно - открыть файл свыше 120Мб (но из-за readAll не более 250). Будет точно такой же вылет.
Мелкие файлы читаются на ура.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 18, 2014, 11:41
Пробежавшись в дебаге по тестовому примеру из сообщения (http://www.prog.org.ru/index.php?topic=27927.msg203600#msg203600) (это где rowCount = 990000000),
можно увидеть, что падение происходит в функции (qbytearray.cpp):
Код
C++ (Qt)
int qAllocMore(int alloc, int extra)
{
   Q_ASSERT(alloc >= 0 && extra >= 0);   // line: 72        alloc = -669934592
...
}
 
причем вызывается функция из (qarraydata.cpp):
Код
C++ (Qt)
   if (options & Grow)
       capacity = qAllocMore(int(objectSize * capacity), int(headerSize)) / int(objectSize);     // line: 97
 
где: objectSize = sizeof(QHeaderViewPrivate::SectionItem) = 8 и capacity = 990000000

вывод 1: возможно есть баг в том, что в функцию qAllocMore передается размер в int (даже не в uint). Надо разбираться
вывод 2: для отображения большого количества данных необходимо писать свой View


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 11:49
Пробежавшись в дебаге по тестовому примеру из сообщения (http://www.prog.org.ru/index.php?topic=27927.msg203600#msg203600) (это где rowCount = 990000000),
можно увидеть, что падение происходит в функции (qbytearray.cpp):
......
вывод 1: возможно есть баг в том, что в функцию qAllocMore передается размер в int (даже не в uint). Надо разбираться
вывод 2: для отображения большого количества данных необходимо писать свой View

То зависание, скорее всего, не относится к моей проблеме. Так совпало, что мне удалось и его выявить :)
qAllocMore у меня тоже один раз выскочила с ошибкой, наверное открыл файл чуть больше обычного.

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

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


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 11:52
Можно еще попробовать заюзать QAbstract* модель и вьюху.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 18, 2014, 11:53
То зависание, скорее всего, не относится к моей проблеме. Так совпало, что мне удалось и его выявить :)
qAllocMore у меня тоже один раз выскочила с ошибкой, наверное открыл файл чуть больше обычного.
То зависание будет отрабатывать в релизной версии с отключенными ASSERT


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 11:57
Можно еще попробовать заюзать QAbstract* модель и вьюху.

К сожалению, я ещё малоопытен чтобы превращать QAbstract во что-то визуальное типа вьюхи.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 11:58
Попробуй для начала реализовать можель не от TableModel, а от абстрактной.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 18, 2014, 12:11
В предыдущем сообщении проблема, которая реально стоит в моем проекте.
Все та же проблема, одним большим непрерывным куском память не выделяется.
Попробуйте читать файл кусками или воспользоваться методами QFile::map, QFile::unmap в модели унаследованной от QAbstractItemModel


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 12:24
Все та же проблема, одним большим непрерывным куском память не выделяется.
Под хранение данных из файла в QByteArray у меня все выделяется. Не совсем понимаю, как метод хранения данных может повлиять на представление.
Если же не прикручивать модель к представлению и открыть все тот же файл, то все откроется без ошибок.
В этом можно убедиться на примере из моего прошлого сообщения (http://www.prog.org.ru/index.php?topic=27927.msg203732#msg203732)


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Пантер от Ноябрь 18, 2014, 12:25
А если потом у модели позапрашивать вручную данные?


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 18, 2014, 12:28
Под хранение данных из файла в QByteArray у меня все выделяется. Не совсем понимаю, как метод хранения данных может повлиять на представление.
Вы же писали про 250 Мб:
Всё что нужно - открыть файл свыше 120Мб (но из-за readAll не более 250). Будет точно такой же вылет.
Мелкие файлы читаются на ура.
Этим сообщением:
Попробуйте читать файл кусками или воспользоваться методами QFile::map, QFile::unmap в модели унаследованной от QAbstractItemModel
я как раз о 250 и выше говорил.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 18, 2014, 12:34
Да, говорил. Но это относится к функции file.readAll().
Поправьте меня, если я ошибаюсь, но эта функция не умеет читать большие файлы. Вместо нее мы можем читать файл порциями и добавлять в память прочитанные блоки.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: Johnik от Ноябрь 18, 2014, 12:45
Поправьте меня, если я ошибаюсь, но эта функция не умеет читать большие файлы.
Умеет, но:
одним большим непрерывным куском память не выделяется.


Вместо нее мы можем читать файл порциями и добавлять в память прочитанные блоки.
Об этом я тоже писал.

P.S. И вообще при возникновении ошибки, попробуйте до нее "дотопать" отладчиком, благо, что исходники Qt есть. Как раз много нового узнаете, и прокачаете свой скил.


Название: Re: qvector.h, line 489: Out of memory
Отправлено: __Heaven__ от Ноябрь 23, 2014, 11:53
Что-то заинтересовал вопрос.
Возможно ли написать свой memcpy (memcpyX86) на asm, который будет работать быстрее стандартного? Или же компиляторы и так её делают максимально эффективной?