컴파일 타임에 알 수없는 인수를 사용하여 함수를 호출해야하는 프로젝트에서 대규모 인라인 어셈블리를 사용합니다. 그리고 때때로 리눅스에서 작동하도록하기 위해 관리합니다. '이 t)는 그 문제가 기억 같은 이상한 일들이 일어날 :루프 내부의 인라인 어셈블리
내가 뭔가를 작동
for(int i = 1; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
같은이있는 경우.
내가
for(int i = this->someVar; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
이 나는의 somevar는이 세그먼트 오류가 발생합니다 값 1을 들고 내 인생을 보장합니다.
내가
int x = 1;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
이 또한 경우는
int x = this->someVar;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
하지 않고 작동합니다.
또한 이상하게도 일부 기능에서는 내가 가지고있는 다른 것들과 같은 문제를 가지고 있지 않지만 모두 같은 대상에 있다고 말할 수 있습니다.
문제가있는 부분을 해결할 수있는 정보를 누군가에게 알려 주면 감사하겠습니다.
for 루프에서 인수를 푸시해야하므로주의하지 않는 것이 좋습니다.
"휘발성"인라인 어셈블리 단어를 사용해 보았지만 아무 것도 변경되지 않았습니다.
질문은 반드시 "배열 요소를 스택에 복사하는 대신 배열에 포인터를 전달하는 것이 좋을 것입니다"라고 질문해야합니다. 그렇지 않으면 무엇인가 놓치고 있습니까? 함께 : func (someArray, this-> someVar) 다음 성능 향상을 얻을 것이다 (아무 메모리 이동, 루프 없음) – Skizz
내가 제어 할 수없는 함수를 호출하고 있습니다. 그들은 다른 도서관에 있습니다.나는 그들에게 그들이 기대하고있는 논증을 전달할 필요가있다. – user246100
컴파일러의 손 아래에서 페어링되지 않은'push '를 수행하여 로컬 변수의 상대 위치를 변경하는 것은 매우 나쁜 생각입니다. – avakar