2010-11-18 6 views
6

저는 게임 프로그래밍 학교에 있습니다. 여기서 중요한 것은 코드 속도에 대해 배워야한다는 것입니다.어셈블리로의 C/C++ 번역, 낮은 수준의 메모리 동작 : 어떻게 수행됩니까?

C/C++에서 프로그래밍 할 때 알아야 할 사항이 있습니까?

C의 기본 동작이 참조/주소가 아닌 데이터를 전달하는 이유, 컴파일러가 참조를 어셈블러로 변환하는 방법 또는 C 루프가 JMP로 변환하는 방법과 같은 많은 것들이 궁금합니다.

저는 파이썬이 다른 방법을 사용하기 때문에 걱정합니다.하지만 파이썬은 값을 복사하기 위해 연산자를 사용하지 않고 구문 적으로 무거운 함수를 사용합니다.

정말 어떻게 어셈블리 프로그램입니다 알고 생각하지 않는다 정말 고통스러운 이후, 나는 단지에 대해 알고하는 데 필요한 것 같아요 필요하다 등 등록

+1

궁극적으로이 질문은 "C/C++로 프로그래밍 할 때 알아야 할 튜토리얼이나 목록이 있습니까?"라고되어 있습니다. 이를 위해 나는 여기서 당신을 지적하고자한다 : [http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list] –

+1

"시기상조 적 최적화는 악의가있다." 알고리즘이 'O (너무 많음)'(예 : 타일 기반 게임에서 플레이어의 옆에 X가 있는지 알아보기 위해 게임의 모든 객체를 반복)하면 C 또는 어셈블리에 대한 깊은 지식을 얻을 수 없습니다 아마도 당신을 구할 수 있습니다. 나만의 최적화 노력을 최적화하십시오 - 최적화가 어디에서 의미 있는지 (추측하지 않고 프로파일 링하여) 생각하고 생각을 "최적화"하십시오. 또한, propably "진짜 질문 아닙니다". – delnan

+0

어셈블리를 알아야 컴퓨터가 실제로 작동하는 방식을 이해할 수 있으므로이를 최적화 할 수 있습니다. –

답변

6

로의 전환을위한 컴파일러의 설명서를 봐 기계어 코드가 아닌 asm 단계를 출력하십시오. 함께 작업 한 모든 컴파일러에는 하나가 있습니다. 이것을 사용하여 asm에 간단한 코드를 보내고 검사하십시오.

VS에는 코드를 단계별로 진행하면서 '어셈블리보기'옵션도 있습니다.

질문에 대한 명확한 답변이 없습니다. 그것은 모두 컴파일러와 아키텍처에 의존합니다. 컴파일러에 제공된 인수에도.

편집 :

질문에 대한 명확한 대답은 물건을 만드는 사람들을 중지되지 않음이 있다는 사실. 한 가지 예는 값으로 반환하는 대신 큰 개체 (예 : 문자열 : p)를 참조로 전달하는 것과 같은 어리석은 작업입니다. 이러한 것들은 새로운 C++ 개발자에게 합리적인 것처럼 보일 것입니다. OF COURSE 문자열을 채우기 위해 함수에 전달하는 것은 복사를 작성하고 해당 함수에서 반환하는 것보다 빠릅니다. 문제는 그 방법으로는 작동하지 않는다는 것입니다. 그것은 매우 컴파일러에 의존하지만 당신은 컴파일러의 모든 능력을 모두 스마트하게하려고하여 최적화 할 수 있습니다.

코드를 빨리 만드는 것에 대한 잘못된 정보가 있습니다. 소금 한 알씩 가져 가라. 빠른 코드를 만드는 방법을 알고 있다고 주장하는 대부분의 사람들은 쓰레기로 가득차 있습니다. 빠른 코드에 대한 유일한 합리적인 대답은 코드를 프로파일 링하는 것입니다. 마이크로 최적화를 할 때가되면 타겟 플랫폼에 매우 중요한 여러 가지 일을하게 될 것입니다. 일반적인 지식, "이것은 더 빠릅니다."물건은 그 시점에서 어떤 용도로도 사용되지 않습니다.

+0

그래서 더 높은 수준의 알고리즘과 디자인 패턴을 탐구 해 각 상황에 맞는 더 빠른 솔루션을 찾아야한다고 생각합니다. 비록 내가 quake3와 같은 엔진이 그렇게 빠른지 궁금해. – jokoon

관련 문제