powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Статический массив неизвестной длины
7 сообщений из 32, страница 2 из 2
Статический массив неизвестной длины
    #39918601
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
alekcvp,
Зашибись, типа собственный менеджер памяти давай напишем.

Ну если у него действительно стопиццоттыщ массивчиков по 5-6 элементов, то динамические массивы реально дают большие накладные расходы: сначала минимальный размер блока в менеджере памяти, потом заголовок блока в менеджере памяти (размер хз), потом префикс динамического массива (8 байт вроде), т.е. ради 20-24 байт данных сверху может набежать ещё дохрена (+ выравнивание). А в моём варианте - нужна только одна переменная, размером в байт, содержащая используемый размер массива. И статические массивы никаких накладных расходов не несут.

Можно вообще изобрести заново shortstring: двумерный статический массив, в каждой строке которого 0й элемент - размер данных в этой строке :)
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39918602
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
Зашибись, типа собственный менеджер памяти давай напишем.

Мысль, на самом деле, здравая. У ТС в контейнере максимум 6 элементов. Даже если храниться будет только 1, то оверхед составит всего 20/40 байт. Таких контейнеров у него около тысячи, итого максимальный оверхед 20/40 KB. Какая-то непонятная попытка экономить на спичках.
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39918604
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Мысль, на самом деле, здравая. У ТС в контейнере максимум

Темнит ТС что-то.
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39918608
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
Темнит ТС что-то.
+100500.

Не поленился написать тест.

Код: 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.
type
  TMyObject = TObject;

  TContainer = class
    FChilds: array of TMyObject;
    constructor Create(ACount: Integer);
  end;


procedure TForm13.Button1Click(Sender: TObject);
var
  I         : Integer;
  Container : TContainer;
begin
  for I:=0 to 1000 do begin
    TContainer.Create(random(5)+1);
  end;
end;

{ TContainer }

constructor TContainer.Create(ACount: Integer);
var
  I: Integer;
begin
  SetLength(FChilds, ACount);
  for I :=0 to ACount-1 do begin
    FChilds[i]:=TMyObject.Create;
  end;
end;


Создание 1000 контейнеров с 1-5 детьми каждый "сжирает" менее 100 кб памяти.

В общем доблестный инспектор Лестрейд уверенно пошел по ложному следу.

Откуда у него там десятки мегабайт - тайна скрытая мраком.
Либо у него все жрет TMyObject либо утечки где-то еще.
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39918974
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Да ты гонишь. Объект минимум - 4 байта - ссылка на VMT класса.

Блин, точно. Ориентировался на код типа PInteger(PByte(Self) + vmtInstanceSize)^, но упустил из виду, что это метод класса, то есть Self там это TObject.

_Vasilisk_
Вы исходный вопрос читали? Именно от этого варианта и хочется уйти

Во-первых, это совсем не тот вариант, что в исходном вопросе, а во-вторых, какое изложение (кривое) - такой и ответ.
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39921464
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Василий 2
Вообще, если говорить о затратах памяти, любой объект изначально уже тратит больше 100 байт только на х32 (vmtCreateObject - vmtSelfPtr). Это еще не считая оверхеда менеджера памяти и своих виртуальных методов и не говоря про х64. Короче, классы - это не вариант, если нужно экономить память


проверил. Что TObject.Create, что New(pInteger) занимают 16 байт (даже в x64). Видимо, для TObject там только указатель на VMT и резервный указатель на Monitor.


У каждого блока оказывается есть ещё заголовок размером NativeUInt
...
Рейтинг: 0 / 0
Статический массив неизвестной длины
    #39921475
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не читал конечно ТЗ, но субъективно очень смахивает на то, что Вам нужна работа с базой данных.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Статический массив неизвестной длины
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]