2012-05-06 8 views
2

부호없는 정수를 0으로 만드는 가장 빠른 방법은 무엇입니까?가장 빠른 방법

나는 현재 단지 값을 0으로 설정하고,하지만 변수를 제로에 대한 모든 트릭이 있는지 모르겠어요? 현재 프로젝트에서 몇 클럭주기가 필요합니다. 나는 표준 8051 프로세서를 사용하고 있는데, 나는 그것이 도움이된다면 0으로 갈 필요가있는 두 가지 변수가있다. 필요가 그것을 0으로 빠른 방법이 될 것 자체 등록을 XOR 연산, 대신 그 안에 제로를 이동 레지스터를 제로로하는 것입니다, 그래서 만약

+8

더 좋은 기회를 얻지 않겠습니까? – delnan

+3

C? 어떻습니까?'x = 0;' – Mysticial

+3

'0'으로 설정하면 이미 빠릅니다. 변수 할당에 성능 저하가 있습니까? 매우 미세한 것 같습니다. – birryree

답변

5

질문은, 8051로 표시됩니다. 하나의 opcode 페치 및 디코드 대 opcode 페치 디코드 및 피연산자 페치 var = 0를 사용하는

당신이 조립 또는 ASM에서 쓰는 손 높은 수준의 언어를 사용하지 않는 경우는, 그것은 더 좋다. 컴파일러는 필요한 최적화를 처리합니다.

+0

감사합니다. 나는 XORing이 필자에게 필요한 몇 사이클을 줄 수있을 것이라고 생각한다. 제안을 감사하십시오 –

+1

Self-XOR은 최대한 빨리 나타납니다. 나는 당황 스럽다. 어셈블러에서 직접 프로그래밍하지 않는 한 사실상 모든 컴파일러는 같은 방법으로 변수를 초기화 할 것이다. – Thomas

+0

하지만 고급 언어를 사용하여 코드를 작성하는 경우 컴파일러에 최적화를 맡기는 것이 더 좋습니다. – phoxis

1

미세 최적화는 미세 결과를 유도합니다.

당신은 가능성이 제로를 달성하기 위해 자체 변수에 xor 수 있습니다. 컴파일러가 이미 그렇게하고있는 것은 대단한 일입니다.

3

최적화 할 필요가없는 일을 최적화 어떤 노력을 낭비하지 않는, 인간에 대한 코드를 작성합니다. 변수에 0을 대입하려면 변수에 0을 대입합니다. x = 0;

빠른 프로그램을 수정하는 것보다 올바른 프로그램을 만드는 것이 더 쉽습니다.

+0

나는이 조언을 확실히 받아 들일 것이지만이 프로젝트는 현재 존재하는 것을 최적화하는 것에 관한 것입니다. 이 코드는 나 자신을 제외하고는 다른 인간이 볼 수 없습니다. –

+0

@JoeWanja는 하드웨어 레지스터를 다루고 있습니다. 부트 롬 콘솔과 NT 장치 드라이버를 작성 했으므로이 코드는 인간이 아니라고 말할 수 있습니다. 그것은 무엇이든 작동합니다. – octopusgrabbus

+0

예, 알겠습니다. [tag : c] 태그가 나를 혼란스럽게 만들었습니다. – LihO

0

먼저 당신이 이미 그렇게하지 않은 경우, 해당 코드가 포함 된 코드 블록 타이밍의 방법을 구현하려고합니다.

그런 다음 var = 0; 목록에 어셈블러를 생성하는 컴파일러 스위치를 사용하십시오. 그런 다음 XOR 솔루션에 대해 동일한 작업을 수행하십시오. 그것은 약간의 추가 작업을 나타냅니다,하지만 당신은 그곳에서 결과를 얻을 것입니다.

2

저는 컴파일러가 이런 종류의 것을 최적화 할 것이라고 믿습니다. 마이크로 최적화는 마이크로 결과를 가져옵니다.