안녕하세요, 홍진혁이라 합니다.
다름이 아니고, 2200000 Bytes에 해당하는 배열 (=DLLData라고 하죠)을
VC++에서 작성한 DLL속으로 넘겨서 DLL 속에서 DLLData 배열을 계산한 다음
다시 델파이로 넘어와서 그 값들을 화면에 뿌려주는 프로그램을 짜고 있는데
2가지 방법을 써보았습니다.
1. 델파이에서 함수의 인자로 (var Data : array of bytes)로 DLL에 넘겨주는 방법
-> 이때는 DLLData를 전역변수 영역에 선언했습니다.
즉,
var DLLData : array[1.. 22000000] of byte;
2. 2200000 Bytes를 VirtualAlloc()으로 힙의 메모리를 할당받아와서
그 포인터를 함수의 인자로 DLL속으로 주고 받는 방법
위의 2가지 방법중 1번의 방법이 좀 더 빨리 프로그램이 돌더군요.
그런데 1번의 경우 전역변수는 C에서 static에 해당하는 메모리 영역이 아닌
전역변수 메모리영역에 할당된다고 들었습니다.
그리고, 2번의 경우는 VirtualAlloc으로 할당된 메모리는 힙(Heap)에 있다고 들었습니다,
제가 알기로는 'Static 메모리 영역 > Stack 메모리 영역 > Heap 메모리 영역'순으로 메모리를
Access 하는 속도가 차이가 난다고 들었습니다.
그래서 가장빠른 Static 메모리 영역에 2200000 Bytes를 할당하려고 여기저기 자료를 뒤져봤지만
Static 메모리 영역에 할당하는 방법을 알지를 못했습니다.
단지 C에서 Static에 해당하는 것이 델파이에서는 const로 선언을 하는 것이라고 알수 있었습니다.
그러나
type
PSV_DLL : array[1..2200000] of byte;
const
DLLData : array[1..2200000] of byte =
(#1, #1, ......, #1); // 2200000 만번 반복
처럼 2200000 Bytes나 되는 것을 초기화 하기도 힘들고, 방법을 알지를 못하겠습니다.
GetMem, HeapAlloc, GlobalAlloc 등 모든 함수가 Heap에만 저장되는 함수들이죠....
혹시 Static 메모리 영역에 공간을 할당할 수 있는 함수나 방법을 알고 계신분은
답변을 부탁드립니다.
그리고, Static 메모리 영역, Stack 메모리 영역, Heap 메모리 영역 이외에
어떤 메모리 영역이 있는지 (예 : 전역변수 메모리 영역)와 그것의 자세한 설명을 부탁드리겠습니다.
그리고, 어떤메모리 영역을 Access하는 것이 가장 빠른 것인지도 부탁드립니다.
procedure aaa;
const
static_iTick: Integer = 0;
var
iTick: Integer absolute static_iTick;
begin
end;
맞나 모르겠군요..^^ 그럼...
홍진혁 wrote:
> 안녕하세요, 홍진혁이라 합니다.
>
> 다름이 아니고, 2200000 Bytes에 해당하는 배열 (=DLLData라고 하죠)을
> VC++에서 작성한 DLL속으로 넘겨서 DLL 속에서 DLLData 배열을 계산한 다음
> 다시 델파이로 넘어와서 그 값들을 화면에 뿌려주는 프로그램을 짜고 있는데
> 2가지 방법을 써보았습니다.
>
> 1. 델파이에서 함수의 인자로 (var Data : array of bytes)로 DLL에 넘겨주는 방법
> -> 이때는 DLLData를 전역변수 영역에 선언했습니다.
> 즉,
> var DLLData : array[1.. 22000000] of byte;
> 2. 2200000 Bytes를 VirtualAlloc()으로 힙의 메모리를 할당받아와서
> 그 포인터를 함수의 인자로 DLL속으로 주고 받는 방법
>
> 위의 2가지 방법중 1번의 방법이 좀 더 빨리 프로그램이 돌더군요.
> 그런데 1번의 경우 전역변수는 C에서 static에 해당하는 메모리 영역이 아닌
> 전역변수 메모리영역에 할당된다고 들었습니다.
> 그리고, 2번의 경우는 VirtualAlloc으로 할당된 메모리는 힙(Heap)에 있다고 들었습니다,
> 제가 알기로는 'Static 메모리 영역 > Stack 메모리 영역 > Heap 메모리 영역'순으로 메모리를
> Access 하는 속도가 차이가 난다고 들었습니다.
> 그래서 가장빠른 Static 메모리 영역에 2200000 Bytes를 할당하려고 여기저기 자료를 뒤져봤지만
> Static 메모리 영역에 할당하는 방법을 알지를 못했습니다.
> 단지 C에서 Static에 해당하는 것이 델파이에서는 const로 선언을 하는 것이라고 알수 있었습니다.
> 그러나
> type
> PSV_DLL : array[1..2200000] of byte;
> const
> DLLData : array[1..2200000] of byte =
> (#1, #1, ......, #1); // 2200000 만번 반복
> 처럼 2200000 Bytes나 되는 것을 초기화 하기도 힘들고, 방법을 알지를 못하겠습니다.
>
> GetMem, HeapAlloc, GlobalAlloc 등 모든 함수가 Heap에만 저장되는 함수들이죠....
>
> 혹시 Static 메모리 영역에 공간을 할당할 수 있는 함수나 방법을 알고 계신분은
> 답변을 부탁드립니다.
>
> 그리고, Static 메모리 영역, Stack 메모리 영역, Heap 메모리 영역 이외에
> 어떤 메모리 영역이 있는지 (예 : 전역변수 메모리 영역)와 그것의 자세한 설명을 부탁드리겠습니다.
> 그리고, 어떤메모리 영역을 Access하는 것이 가장 빠른 것인지도 부탁드립니다.
>