Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming.threads > #4268

Here is a Delphi and FreePascal unit

From Sky89 <Sky89@sky68.com>
Newsgroups comp.programming.threads
Subject Here is a Delphi and FreePascal unit
Date 2018-05-15 17:03 -0400
Organization A noiseless patient Spider
Message-ID <pdf3su$v8p$2@dont-email.me> (permalink)

Show all headers | View raw


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.



Back to comp.programming.threads | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

Here is a Delphi and FreePascal unit Sky89 <Sky89@sky68.com> - 2018-05-15 17:03 -0400
  Re: Here is a Delphi and FreePascal unit Sky89 <Sky89@sky68.com> - 2018-05-15 17:38 -0400

csiph-web