tol64 : 32비트 단말기에서만 발생하는 문제인가요? x64가 있습니다. " ...배열과 같은 함수의 큰 크기의 지역 변수 ... "를 이해하는 방법은 무엇입니까? 스택이 오버플로하려면 얼마나 커야 합니까?
아니오, 이것은 32비트 터미널 문제만이 아닙니다. 그러나 오늘날 32비트용 솔루션이 준비되었으며 64비트에서는 여전히 256Kb의 스택 제한이 있습니다. 그러나 프로그래머 자신이 속성을 통해 필요한 스택 크기를 지정하지 않으면 터미널의 EX5가 기본 스택 크기(256Kb)로 작동합니다.
큰 크기에 대해. 함수 내부의 각 변수 선언(정적 변수 제외)은 스택에 공간이 할당되는 반면, 로컬 변수에 대한 스택 공간 할당은 호출할 때마다 발생합니다.
따라서 함수의 크기가 64Kb인 지역 변수가 있으면 스택은 3번의 중첩 호출에 충분하며 4번째 호출에서는 스택이 오버플로됩니다(스택의 일부가 터미널의 내부 요구 사항으로 이동하기 때문에). 따라서 대용량 로컬 데이터가 필요한 경우 동적 메모리를 사용하는 것이 좋습니다. 함수에 들어갈 때 로컬에 필요한 메모리가 시스템에 할당되고(new, ArrayResize) 함수가 종료되면 메모리가 삭제됩니다( 삭제, ArrayFree).
모든 세부 사항과 함께 서비스 데스크에 서신을 보내 십시오(필요한 경우 전문가를 연결하십시오). 이게 더 빠를거야
배열과 같은 큰 함수 지역 변수를 사용 중일 수 있습니다.
다음 빌드에서는 32비트 터미널의 경우 해당 컴파일러 속성 #property stacksize 를 통해 스택 크기를 제어할 수 있습니다.
32비트 단말기에서만 발생하는 문제인가요? x64가 있습니다. " ...배열과 같은 함수의 큰 크기의 지역 변수 ... "를 이해하는 방법은 무엇입니까? 스택이 오버플로하려면 얼마나 커야 합니까?
그러나 프로그래머 자신이 속성을 통해 필요한 스택 크기를 지정하지 않으면 터미널의 EX5가 기본 스택 크기(256Kb)로 작동합니다.
큰 크기에 대해.
함수 내부의 각 변수 선언(정적 변수 제외)은 스택에 공간이 할당되는 반면, 로컬 변수에 대한 스택 공간 할당은 호출할 때마다 발생합니다.
따라서 함수의 크기가 64Kb인 지역 변수가 있으면 스택은 3번의 중첩 호출에 충분하며 4번째 호출에서는 스택이 오버플로됩니다(스택의 일부가 터미널의 내부 요구 사항으로 이동하기 때문에). 따라서 대용량 로컬 데이터가 필요한 경우 동적 메모리를 사용하는 것이 좋습니다. 함수에 들어갈 때 로컬에 필요한 메모리가 시스템에 할당되고(new, ArrayResize) 함수가 종료되면 메모리가 삭제됩니다( 삭제, ArrayFree).
안녕하세요!
나는 이 문제를 이해할 수 없다.
filehandle=FileOpen("My\\Symbols.txt", FILE_READ|FILE_TXT|FILE_ANSI );
디버깅에서 잘 작동하고 MT5\MQL5\File\에 있는 파일을 읽을 수 있습니다.
테스터에서 실행할 때 "Symbols.txt 파일을 열 수 없습니다. 오류 5004"라고 표시되고 핸들은 -1입니다.
MT5\tester\agent000\MQL5\File 폴더에도 넣었는데 역시나 안보이고 거기에서 아예 죽습니다.)
그러나 설명은 다음과 같이 말합니다.
"파일이 MQL5\files 하위 폴더(또는 테스트의 경우 testing_agent_directory\MQL5\files)의 클라이언트 터미널 폴더에서 열립니다."
"함수는 로컬 폴더(테스트의 경우 MQL5\Files 또는 MQL5\Tester\Files)에서 파일을 찾습니다."
그리고 도움말에 언급된 " MQL5\Tester\Files" 폴더가 없습니까?
내가 무엇을 잘못하고 있으며 이 문제를 어떻게 극복할 수 있습니까?
당신의 답변에 감사드립니다.
#property tester_file 을 사용해 보세요.
#property tester_file "My\\Symbols.txt"
#property tester_file 을 사용해 보세요.
Wow-x-x MT5\tester\agent000\MQL5\File을 다시 배치한 다음 속성 과 함께 작동하는 데 도움이 된 것 같습니다.
덕분에!
테스터에서 핸들 -1을 다시 시도하고 오류 5004를 시도했습니다.
나는 여기에 무엇이 있을지 이해할 수 없습니다. 분명히 그는 파일을 찾지 못했지만 디버깅할 때 모든 것을 봅니다.
파일을 MQL5\Tester\Files에 복사하십시오( 폴더 생성 후).
나는 그것을 시도하고 핸들이있는 폴더를 만들고 내 파일을 넣었습니다 (하위 폴더와 함께 #property tester_file ). 어떤 식 으로든 테스터에서 찾지 못했습니다.
그리고 #property tester_file 을 포함하면 이상하게도 충분히 작동합니다.
사실, 때때로 MT5\tester\agent000\MQL5\File에 있는 폴더와 파일이 충돌합니다. 아마도 #property tester_file 을 비활성화하면 거기에 있는 모든 것을 문지르기 때문일 것입니다.
예, 이제 mq5 파일(txt가 호출되는 곳)의 코드(어디서나)를 변경한 다음 컴파일하고 테스터로 이동하면 MT5\tester\agent000\MQL5\의 모든 것을 문지릅니다. 파일
몇 가지 기적이 있지만 적어도 어떻게 든 잘 작동합니다.
나는 그것을 시도하고 핸들이있는 폴더를 만들고 내 파일을 넣었습니다 (하위 폴더와 함께 #property tester_file ). 어떤 식 으로든 테스터에서 찾지 못했습니다.
그리고 #property tester_file 을 포함하면 이상하게도 충분히 작동합니다.
사실, 때때로 MT5\tester\agent000\MQL5\File에 있는 폴더와 파일이 충돌합니다. 아마도 #property tester_file 을 비활성화하면 거기에 있는 모든 것을 문지르기 때문일 것입니다.
예, 이제 mq5 파일(txt가 호출되는 곳)의 코드(어디서나)를 변경한 다음 컴파일하고 테스터로 이동하면 MT5\tester\agent000\MQL5\의 모든 것을 문지릅니다. 파일
몇 가지 기적이 있지만 적어도 어떻게 든 잘 작동합니다.
W7인 경우 파일을 Document and Setting/.../MetaQuotes/Common/Files 디렉터리에 넣거나 UAC를 비활성화합니다.
추신: 이름의 철자, 이름이 쓰여진 레이아웃(물론 복사하여 붙여넣기가 더 낫습니다), 이름 끝에 공백이 있는지 등을 확인합니다.
W7인 경우 파일을 Document and Setting/.../MetaQuotes/Common/Files 디렉터리에 넣거나 UAC를 비활성화합니다.
추신: 이름의 철자, 이름이 쓰여진 레이아웃(물론 복사하여 붙여넣기가 더 낫습니다), 이름 끝에 공백이 있는지 등을 확인합니다.
실제로 Win7 64비트가 있지만 UAC는 0입니다.
C:\Documents and Settings\All Users\MetaQuotes\Terminal\Common\Files\ 폴더와 파일을 거기에 넣었지만 도움이 되지 않았고 테스터에서 파일을 찾지 못했습니다.
예, 모든 것이 이름과 함께 올바른 것처럼 보이지만 테스트에서 #property tester_file 에서 작동하지만(모든 디버깅에서 작동합니다) 테스터에서는 #property tester_file 을 통하는 경우를 제외하고는 작동하지 않습니다.
그런 다음 위에서 언급한 mq5를 변경하고 컴파일한 후 파일을 죽이는 문제가 있습니다(저는 그런 상황이 있습니다).
당신의 도움으로 노골적인 거짓말이 쓰여졌습니다.
CLBufferWrite
OpenCL 버퍼에 배열을 씁니다.
부울 CLBufferWrite (
정수 완충기 // OpenCL 버퍼에 대한 핸들
const 무효 & 데이터[] // 값 배열
단위 오프셋=0 // 어느 요소에서, 기본적으로 첫 번째 요소에서
무효의 크기=WHOLE_ARRAY // 값의 수, 기본적으로 전체 배열
);
옵션
......오프셋
.....
크기
【인】 쓸 값 의 수입니다. 기본적으로 모든 배열 값 은 OpenCL 버퍼에 기록됩니다.
......실제로 바이트 수(!!)가 기록되고 값이 전혀 기록되지 않습니다.
나는 그것을 완료 할 때까지 표시기를 디버깅하는 데 이틀 저녁을 보냈습니다 ..! 그리고 왜 모든 것입니까? - Patamushta는 당신의 경전을 믿었습니다 ...
즉시 수정!! :))
// 기본적으로 ( size=WHOLE_ARRAY ) 올바르게 작동합니다.