루프 내부에 정의 된 지역 변수

Hairi

함수와 여러 개의 중첩 루프가 있습니다. 각 루프는 다른 루프에서 사용하지 않는 다른 변수를 사용합니다.

내 질문은 최적화 고려 사항에 의해 동기가 부여되었습니다.

여기 있습니다 : 어떤 접근 방식이 더 낫습니까?

루프 본문 내부에 지역 변수를 정의하려면

void aspProtocolDetectEvents()
{
    uint8_t arrayIndex;
    for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
    {
        uint8_t contextBitPosition;
        for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
        {
            __aspProtocol_Event contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
            if( __aspProtocol_isRisenEvent(contextEvent) )
            {
                __aspProtocol_dispatchEvent(contextEvent);
                __aspProtocol_clearEvent(contextEvent);
            }
        }
    }
}

아니면 다음과 같이 함수 본문의 시작 부분에 모두 정의하는 것이 더 낫습니까? :

void aspProtocolDetectEvents()
{
    uint8_t arrayIndex;
    uint8_t contextBitPosition;
    __aspProtocol_Event contextEvent;
    for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
    {
        for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
        {
            contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
            if( __aspProtocol_isRisenEvent(contextEvent) )
            {
                __aspProtocol_dispatchEvent(contextEvent);
                __aspProtocol_clearEvent(contextEvent);
            }
        }
    }
}

내 말은, 컴파일러가 그것을 최적화하는지 모르겠습니다. 코드 구조 측면에서 나는 첫 번째 예제를 선호하지만 더 많은 시간이 걸리면 (루프가 반복 될 때마다 할당) 타협하고 두 번째 예제를 사용해야합니다.

현지인이므로 스택에 할당됩니다. 컴파일러는 함수가 호출 될 때 스택 포인터를 조정하여 모든 지역에 충분한 공간이 있는지 확인하여이를 수행합니다.

중첩 된 범위의 변수에 공간이 할당되는 방식에 대해서는 걱정하지 않습니다. 범위가 지정된 로컬을 사용할 때 속도 문제가 있다고 생각되면 프로파일 러를 사용하여 측정하지만 이것이 조기 최적화의 고전적인 경우라고 생각합니다. 대신 읽기 쉽고 유지 관리 할 수있는 코드를 작성하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

한 줄의 for 루프 내부에 지역 변수 설정 시도

분류에서Dev

루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

분류에서Dev

루프 및 지역 변수 내부의 폐쇄

분류에서Dev

while 루프 내부에 변수 정의

분류에서Dev

while 루프 내부에 할당 된 전역 변수는 루프 외부에서 사용할 수 없습니다.

분류에서Dev

향상된 for 루프의 지역 변수 범위

분류에서Dev

SQL Server : WHILE 루프 내에서 수정 된 변수는 루프 외부에서 선택 될 때 변경되지 않은 것으로 나타납니다.

분류에서Dev

루프의 지역 및 전역 변수

분류에서Dev

메서드 외부에서 메서드 내부에 정의 된 지역 변수 이름 가져 오기

분류에서Dev

JS for 루프의 전역 변수에 대한 지역 변수, 루프 종료 후 값이 변경됨

분류에서Dev

미리 지정된 변수 값으로 for 루프 정의

분류에서Dev

루프 내부의 전역 변수에 추가 하시겠습니까?

분류에서Dev

봉인 된 객체 내부의 지역 변수가 정보를 전역 변수에 전달할 수 있습니까?

분류에서Dev

루프 파이썬 내부에서 변수 재정의

분류에서Dev

비동기 forEach 루프가 실행 된 후 전역 변수 재정의

분류에서Dev

for 루프 내에서 선언 된 변수의 범위

분류에서Dev

양보 반환이있는 foreach 루프 내부의 '할당되지 않은 지역 변수 사용'오류

분류에서Dev

'읽는 동안'루프에 설정된 변수 값이 루프 외부의 값을 잃습니다.

분류에서Dev

함수 내에 정의 된 전역 변수에 액세스

분류에서Dev

sed 명령에 지정된 변수에 대해 do 루프 사용

분류에서Dev

루프 내부에서 루프 외부의 변수를 설정하려고 할 때 값이 충분히 오래 지속되지 않습니다.

분류에서Dev

루프 내에서 지역 함수 변수 사용

분류에서Dev

while 루프 외부에서 선언 된 변수는 스칼라의 while 루프 내부에서 액세스 할 수 없습니다.

분류에서Dev

for 루프, Javascript 내부에 동적으로 생성 된 변수

분류에서Dev

외부 범위에 정의 된 변수가 내부 범위에 정의되지 않았습니다.

분류에서Dev

Julia의 'while 루프'에있는 "정의되지 않은 변수"

분류에서Dev

do 루프에 설정된 내 변수가 사라지는 이유는 무엇입니까? (유닉스 쉘)

분류에서Dev

루프에서 변수 내부의 변수

분류에서Dev

루프에서 변수 내부의 변수

Related 관련 기사

  1. 1

    한 줄의 for 루프 내부에 지역 변수 설정 시도

  2. 2

    루프 외부에서 정의되었지만 해당 루프 내부에서 호출 된 함수에서 변수 전달

  3. 3

    루프 및 지역 변수 내부의 폐쇄

  4. 4

    while 루프 내부에 변수 정의

  5. 5

    while 루프 내부에 할당 된 전역 변수는 루프 외부에서 사용할 수 없습니다.

  6. 6

    향상된 for 루프의 지역 변수 범위

  7. 7

    SQL Server : WHILE 루프 내에서 수정 된 변수는 루프 외부에서 선택 될 때 변경되지 않은 것으로 나타납니다.

  8. 8

    루프의 지역 및 전역 변수

  9. 9

    메서드 외부에서 메서드 내부에 정의 된 지역 변수 이름 가져 오기

  10. 10

    JS for 루프의 전역 변수에 대한 지역 변수, 루프 종료 후 값이 변경됨

  11. 11

    미리 지정된 변수 값으로 for 루프 정의

  12. 12

    루프 내부의 전역 변수에 추가 하시겠습니까?

  13. 13

    봉인 된 객체 내부의 지역 변수가 정보를 전역 변수에 전달할 수 있습니까?

  14. 14

    루프 파이썬 내부에서 변수 재정의

  15. 15

    비동기 forEach 루프가 실행 된 후 전역 변수 재정의

  16. 16

    for 루프 내에서 선언 된 변수의 범위

  17. 17

    양보 반환이있는 foreach 루프 내부의 '할당되지 않은 지역 변수 사용'오류

  18. 18

    '읽는 동안'루프에 설정된 변수 값이 루프 외부의 값을 잃습니다.

  19. 19

    함수 내에 정의 된 전역 변수에 액세스

  20. 20

    sed 명령에 지정된 변수에 대해 do 루프 사용

  21. 21

    루프 내부에서 루프 외부의 변수를 설정하려고 할 때 값이 충분히 오래 지속되지 않습니다.

  22. 22

    루프 내에서 지역 함수 변수 사용

  23. 23

    while 루프 외부에서 선언 된 변수는 스칼라의 while 루프 내부에서 액세스 할 수 없습니다.

  24. 24

    for 루프, Javascript 내부에 동적으로 생성 된 변수

  25. 25

    외부 범위에 정의 된 변수가 내부 범위에 정의되지 않았습니다.

  26. 26

    Julia의 'while 루프'에있는 "정의되지 않은 변수"

  27. 27

    do 루프에 설정된 내 변수가 사라지는 이유는 무엇입니까? (유닉스 쉘)

  28. 28

    루프에서 변수 내부의 변수

  29. 29

    루프에서 변수 내부의 변수

뜨겁다태그

보관