Sky89
unread,May 15, 2018, 1:03:28 PM5/15/18You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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.