Конференция "Начинающим" » Локальный массив процедуры/функции
 
  • rrrrrr © (09.06.17 19:29) [20]
    Это процедуры отрисовки. GetMem тормоз.

    а массив типа это газ.
  • Sha © (09.06.17 19:37) [21]
    >> тогда сделай массив полем класса потока
    > Непотокобезопасно. Только локальный :(

    ???
    В каждом потоке использовать поле класса потока небезопасно???
    Это если только лезть к нему из 1000 других потоков, кроме одного потока-владельца.
  • SergP © (09.06.17 21:44) [22]
    Во. А если сделать так:


    var
     Form1: TForm1;
     MAX:integer;
     Bytelen:integer;

    implementation

    {$R *.dfm}

    procedure proc(var A:array of integer);
    begin
    a[12]:=555;
    showmessage(inttostr(a[12]));
    end;

    procedure DoSomething;
    asm
     sub esp,Bytelen
     mov eax,esp
     mov edx,MAX
     call proc
     add esp,Bytelen
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     DoSomething;
    end;

    initialization
    MAX:=40;
    Bytelen:=(MAX+1)*sizeof(integer);

    end.


    ?
    Так вроде должно работать.
  • Sha © (09.06.17 21:56) [23]
    > SergP ©   (09.06.17 21:44) [22]

    Все несколько сложнее,
    см. реализацию этой идеи в исходниках (искать что-то вроде StackAlloc)
  • dmk © (09.06.17 22:11) [24]
    Проще использовать один глобальный массив, а в процедуру передвать линейный адрес смещения в массиве.
  • dmk © (09.06.17 22:15) [25]
    >по умолчанию под потоковый стек выделяется всего один мегабайт
    У меня пока локальный массив 10,54 Кб. Для 5K хватит.
    20,48 Кб для 8K, но я пока таких мониторов не видел.
  • Inovet © (15.06.17 09:48) [26]
    > [25] dmk ©   (09.06.17 22:15)
    > но я пока таких мониторов не видел

    Мониторов может быть много, так что не надо на разрешение завязываться. Про поле класса потока ты, похоже, не то что-то понял.
  • QAZ (15.06.17 18:54) [27]
    threadvar
 
Конференция "Начинающим" » Локальный массив процедуры/функции
Есть новые Нет новых   [87965   +9][b:0.001][p:0.001]