2013-05-11 2 views
3

는 아래의 코드 사이의 차이가있다 시각?while (a == b); 이 컴파일러 또는 실행에 영향을 않는다</p> <ol> <li><code>while (a==b);</code></li> <li><code>while (a==b) {;}</code></li> </ol> <p>:; 동안 (a ==의 b) 대 {}

이 질문에 대한 배경 : 현재 FW는 코드 1을 사용합니다. 여기서 a 또는 b는 실제로 전역 변수이며 FW는 다른 코어에서 조건이 true가 될 때까지 특정 코어에서 정지하거나 대기합니다. 우리는이 코드를 SystemC에서 시뮬레이션하고 싶습니다.이 "무한"while 루프는 SystemC 컨텍스트 아래에 있지 않으므로 SystemC 스케줄러는이 스레드가 다른 스레드를 기다리고 있음을 알지 못해 교착 상태가 발생할 수 있습니다.

따라서 우리는 함께 코드를 교체하려면 : while (a==b) {CONTEXT_SWITCH(1);} 대상 빌드 우리가

:

#define CONTEXT_SWITCH(x) 

및 SystemC를위한

우리를 구축가 있습니다

#define CONTEXT_SWITCH(x) wait(x) //where wait is a systemC wait 

에서이 코드 타겟 빌드의 경우 코드 2가됩니다. 이것이 성능에 어떻게 든 영향을 줄 수 있는지 알고 싶습니까?

+0

'while (a == b) {}}뿐 아니라'while (a == b) {}'이 아닌 이유는 무엇입니까? 전자가 너무 느린 것으로 판명되면 후자를 시험해 볼 수 있습니다. :) 진지하게, 차이는 없습니다. 컴파일러가 어떻게 든 다르게 작동하는 경우 "영향을 미치는지"여부 만 알 수 있습니다. – AnT

답변

8

컴파일러 또는 실행 시간에 영향을 줍니까?

아니요. 정확히 같은 것입니다. 런타임에는 차이가 없으며 컴파일 시간의 차이는 파싱에 대한 차이가 거의 없습니다. {;}.

어떤 이유로 든 하나를 선택해야하는 경우 의도가 명확한 것을 선택하십시오.

+0

나는 항상 {;}을 고른다. 하나는 무한 루프가있는 사고처럼 보이기 때문에 왜 그런지, 다른 하나는 의도와 같이 보입니다. – SinisterMJ

+0

빠른 답장을 보내 주셔서 감사합니다! – subtle85

+0

@ subtle85 : 기꺼이 도와 드리겠습니다. 귀하의 질문에 대한 답변이 있으면 답변을 수락 한 것으로 표시하거나 다른 사용자가 선호하는 다른 답변을 표시하십시오. –

1

좋은 주류 컴파일러는 정확한 어셈블리 코드를 생성합니다. 따라서 실제 런타임 성능에는 차이가 없습니다.

어느 쪽을 선택 하느냐하는 것이 중요합니다. 당신이 요구하는 코딩 표준을 선택하십시오.

+0

세계에서 가장 멍청하고, 순진하게 구현 된 컴파일러조차도 두 구문에 대해 동일한 어셈블리를 생성해야합니다. 구문 적으로나 의미 적으로 동일합니다. –

0

아니요, 성능에 전혀 영향을 미치지 않아야합니다.

중괄호는 코드를 생성하지 않습니다. 컴파일러는이를 사용하여 복합 명령문의 시작과 끝을 결정합니다. 컴파일러에서 복합 또는 단일 문은 동일한 방식으로 처리됩니다. 중괄호는 컴파일러가 while 루프에 대한 문으로 이동하려는 내용을 알고 있도록하기위한 것입니다.

1

while (a == b)를 쓸 때 둘 다 동일한 실행 시간을 갖습니다. 컴파일러는 내부적으로 while (a == b) {;}로 변환합니다. 따라서 어떤 형식으로 작성했는지는 중요하지 않습니다.