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


Groups > comp.programming.threads > #4268 > unrolled thread

Here is a Delphi and FreePascal unit

Started bySky89 <Sky89@sky68.com>
First post2018-05-15 17:03 -0400
Last post2018-05-15 17:38 -0400
Articles 2 — 1 participant

Back to article view | Back to comp.programming.threads


Contents

  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

#4268 — Here is a Delphi and FreePascal unit

FromSky89 <Sky89@sky68.com>
Date2018-05-15 17:03 -0400
SubjectHere is a Delphi and FreePascal unit
Message-ID<pdf3su$v8p$2@dont-email.me>
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.



[toc] | [next] | [standalone]


#4270

FromSky89 <Sky89@sky68.com>
Date2018-05-15 17:38 -0400
Message-ID<pdf5un$c8t$4@dont-email.me>
In reply to#4268
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"



> 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.
> 
> 
> 
> 

[toc] | [prev] | [standalone]


Back to top | Article view | comp.programming.threads


csiph-web