Исключение при выделении массива, не исключение при выделении его как двумерного массива [закрыто]

Нашел ответ:

self.icdDataView.setModel(mdl)
self.icdDataView.setColumnHidden(0, True)
self.icdDataView.horizontalHeader().setStretchLastSection(False)
self.icdDataView.setColumnWidth(1, 100)
self.icdDataView.setColumnWidth(3, 100)
self.icdDataView.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch)
self.icdDataView.selectRow(0)
-1
задан einpoklum 19 January 2019 в 15:43
поделиться

1 ответ

Разница заключается в том, что в первом фрагменте кода запрашивается один большой блок памяти с размером 524288 * 524288 * sizeof (int). Во втором код запрашивает один блок размером 524288 * sizeof (int *) и 524288 блоков размером 524288 * sizeof (int).

Меньшие блоки, как правило, проще, с точки зрения управления памятью, потому что они легче помещаются между блоками, которые уже были выделены. Это то, что в комментариях называется «фрагментация кучи» - когда программа выделяет кучу блоков и освобождает некоторые из них, освобожденные блоки распределяются между блоками, которые не были освобождены. Выделение большого блока может затем потерпеть неудачу, если ни один из освобожденных блоков не будет достаточно большим для этого блока, в то время как группа меньших выделений может быть успешной, даже если объем памяти, выделенный для меньших блоков, больше, чем отказавший большой блок.

0
ответ дан Pete Becker 19 January 2019 в 15:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: