![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
objects allocation on the stack (speedy) is it possible in KOL?
thaddy © (2005-01-24 19:35:00)something by Robert Marsh:
Is it possible to implement in kol?
I am still unsuccesfull in translating it
http://www.undu.com/Articles/010327a.html
thaddy (2005-01-24 23:19:00) [1]Yes! I knew that trick :) but my problem with the (equally dangerous) translation of the code was that I could find no wat to determine if a call was from the inside if a Kol object or not.
Is there a way to determine where the memory allocation for a Tobj starts (yes, found it) and ends (no, could not determine that)?
What I want to achieve is a speedy way to allocate and de-allocate small objects by simply replacing the memory manager, as Robert Marsh has done in his sourcecode.
Btw: the code in grids.pas is safer than yours, because it always 'touches' the page boundary, thus allocating/growing the stack if appropiate. This only fails if you allocate more than 1 Mb of space since that is the standard amount of stackspace given to any given process or thread.
There has to be Some way??
Владимир Кладов (2005-01-24 21:11:00) [2]Don't know about objectallocation, but it is possible to allocate an array:
function UseStack( Size: DWORD ): Pointer;
asm
POP ECX
SUB ESP, EAX
MOV EAX, ESP
PUSH ECX
end;
procedure UnUseStack( Size: DWORD );
asm
POP ECX
ADD ESP, EAX
PUSH ECX
end;
{$STACKFRAMES ON} // *** REQUIRED!
procedure TForm1.Button6Click(Sender: PObj);
const sz = 10000;
var Ptr: Pointer;
begin
Ptr := UseStack( sz );
FillChar( Ptr^, sz, $AB );
UnUseStack( sz );
end;
No memory manager replacement required, usage very simple, but... dangerous!