Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Here is a Delphi and FreePascal unit

4 views
Skip to first unread message

Sky89

unread,
May 15, 2018, 1:03:28 PM5/15/18
to
Hello..


Here is a Delphi and FreePascal unit that i have just wrote that permits
to allocated an aligned memory, i have tested it and it works great, it
is well suited for parallel programming:


Here is first the define.inc file:

==

{$DEFINE CPU64}

==


And here is the Delphi and FreePascal unit:

===

unit Getmem_aligned1;


{$I defines.inc}

interface

type

typecache1 = array[0..15] of longword;

{$IFDEF CPU64}
long = uint64;
int = int64;
{$ENDIF CPU64}
{$IFDEF CPU32}
long = longword;
int = integer;
{$ENDIF CPU32}


type IntPtr=^Int;

procedure getmem_aligned(alignment:cardinal;var ptr:pointer;size:cardinal);
procedure freemem_aligned(ptr:pointer);


implementation


procedure getmem_aligned(alignment:cardinal;var ptr:pointer;size:cardinal);

var ptr1,ptr2,ptr3:pointer;

begin

ptr := AllocMem(size + (2*alignment) + sizeof(pointer));

ptr1:=pointer(int(ptr)+sizeof(pointer));

ptr2 := Pointer((int(ptr1) + Alignment - 1) and not (Alignment - 1));

ptr3:=pointer(int(ptr2)-sizeof(pointer));

intptr(ptr3)^:=int(ptr);

ptr:=ptr2;


end;


procedure freemem_aligned(ptr:pointer);

var ptr1,ptr2:pointer;

begin

ptr1:=pointer(int(ptr)-sizeof(pointer));

int(ptr2):=intptr(ptr1)^;

freemem(ptr2);

end;


end.

==




Thank you,
Amine Moulay Ramdane.




Sky89

unread,
May 15, 2018, 1:38:33 PM5/15/18
to
On 5/15/2018 5:03 PM, Sky89 wrote:
> Hello..
>
>
> Here is a Delphi and FreePascal unit that i have just wrote that permits

I correct: we write in english: "that i have just written"
0 new messages