Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming.threads > #4268 > unrolled thread
| Started by | Sky89 <Sky89@sky68.com> |
|---|---|
| First post | 2018-05-15 17:03 -0400 |
| Last post | 2018-05-15 17:38 -0400 |
| Articles | 2 — 1 participant |
Back to article view | Back to comp.programming.threads
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
| From | Sky89 <Sky89@sky68.com> |
|---|---|
| Date | 2018-05-15 17:03 -0400 |
| Subject | Here 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]
| From | Sky89 <Sky89@sky68.com> |
|---|---|
| Date | 2018-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