|
|
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
ёёёёё alekcvp, Зашибись, типа собственный менеджер памяти давай напишем. Ну если у него действительно стопиццоттыщ массивчиков по 5-6 элементов, то динамические массивы реально дают большие накладные расходы: сначала минимальный размер блока в менеджере памяти, потом заголовок блока в менеджере памяти (размер хз), потом префикс динамического массива (8 байт вроде), т.е. ради 20-24 байт данных сверху может набежать ещё дохрена (+ выравнивание). А в моём варианте - нужна только одна переменная, размером в байт, содержащая используемый размер массива. И статические массивы никаких накладных расходов не несут. Можно вообще изобрести заново shortstring: двумерный статический массив, в каждой строке которого 0й элемент - размер данных в этой строке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2020, 01:11 |
|
||
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
ёёёёё Зашибись, типа собственный менеджер памяти давай напишем. Мысль, на самом деле, здравая. У ТС в контейнере максимум 6 элементов. Даже если храниться будет только 1, то оверхед составит всего 20/40 байт. Таких контейнеров у него около тысячи, итого максимальный оверхед 20/40 KB. Какая-то непонятная попытка экономить на спичках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2020, 01:13 |
|
||
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Мысль, на самом деле, здравая. У ТС в контейнере максимум Темнит ТС что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2020, 01:24 |
|
||
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
ёёёёё Темнит ТС что-то. Не поленился написать тест. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Создание 1000 контейнеров с 1-5 детьми каждый "сжирает" менее 100 кб памяти. В общем доблестный инспектор Лестрейд уверенно пошел по ложному следу. Откуда у него там десятки мегабайт - тайна скрытая мраком. Либо у него все жрет TMyObject либо утечки где-то еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2020, 02:30 |
|
||
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Да ты гонишь. Объект минимум - 4 байта - ссылка на VMT класса. Блин, точно. Ориентировался на код типа PInteger(PByte(Self) + vmtInstanceSize)^, но упустил из виду, что это метод класса, то есть Self там это TObject. _Vasilisk_ Вы исходный вопрос читали? Именно от этого варианта и хочется уйти Во-первых, это совсем не тот вариант, что в исходном вопросе, а во-вторых, какое изложение (кривое) - такой и ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2020, 10:27 |
|
||
|
Статический массив неизвестной длины
|
|||
|---|---|---|---|
|
#18+
DmSer Василий 2 Вообще, если говорить о затратах памяти, любой объект изначально уже тратит больше 100 байт только на х32 (vmtCreateObject - vmtSelfPtr). Это еще не считая оверхеда менеджера памяти и своих виртуальных методов и не говоря про х64. Короче, классы - это не вариант, если нужно экономить память проверил. Что TObject.Create, что New(pInteger) занимают 16 байт (даже в x64). Видимо, для TObject там только указатель на VMT и резервный указатель на Monitor. У каждого блока оказывается есть ещё заголовок размером NativeUInt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2020, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39921464&tid=2038640]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 497ms |

| 0 / 0 |
