C for문 안에서 변수를 선언하면 register 변수로 동작할까요?

high385의 이미지

int totalsum = 0;
For (int i=0;i <5;i++){
    register int sum = 0;
    {
       sum +=2+2;
     }
     {
        sum +=3+4;
      }
     totalsum += sum;
}

위와 같이 sum을 for문 안에 선언하는 경우와 totalsum처럼

for문 밖에 선언하는 경우의 속도 성능차가 존재할까요?

미미한 성능 차이일까요?

캐시안에 존재하게하려면 for문안에 변수를 선언하라고 하던데

변수가 매 for문마다 새롭게 sum을 생성하는데 캐시안에 load하는데

시간이 걸리진않을까요?

그리고 for문안의 {}가 많을수록 캐시에 새롭게 변수가 업데이트되어야하니까

속도 성능이 나빠질까요?

그렇다면 for문안의 {}대신 함수호출로 대신한다면 더 좋을까요?

나쁠까요?

라스코니의 이미지

1) 위와 같이 sum을 for문 안에 선언하는 경우와 totalsum처럼

for문 밖에 선언하는 경우의 속도 성능차가 존재할까요?

==> 성능차가 있을 수 있습니다. 그것은 -O1, -O2, -O3 중 어떤 최적화 수준으로 컴파일 했느냐에 따라서 달라질 겁니다.

2) 미미한 성능 차이일까요?

==> 네. 매우 미미한 차이입니다. 이 함수나 루프가 초당 수만번 불리고, 엄청나게 느린 프로세서가 들어가는 임베디드 환경이 아니라면 전혀 신경쓸 필요없습니다.

3) 캐시안에 존재하게하려면 for문안에 변수를 선언하라고 하던데

변수가 매 for문마다 새롭게 sum을 생성하는데 캐시안에 load하는데

시간이 걸리진않을까요?

==> 루프 내부에 변수를 선언하는 것은 꼭 루프가 새 턴(new turn)이 시작될 때마다 그 변수가 생성된다는 의미가 아닙니다. 그냥 scope의 의미로 봐야 합니다. 컴파일러가 다 알아서 굳이 새로 만들이 않아도 되도록 해 줍니다. 그리고 요새 CPU는 캐쉬가 엄청 옛날과 비교해서 넘사벽으로 커졌습니다. 이 간단한 루프에서 처리되는 변수가 캐쉬라인에 안들어 갈리가 없습니다.

4) 그리고 for문안의 {}가 많을수록 캐시에 새롭게 변수가 업데이트되어야하니까

속도 성능이 나빠질까요?

그렇다면 for문안의 {}대신 함수호출로 대신한다면 더 좋을까요?

나쁠까요?

==> 루프내에 얼마나 {}가 있던지 실행에는 전혀 영향이 없습니다. 함수 호출은 기본으로 많은 CPU 사이클을 잡아 먹기 때문에 속도가 중요한 경우에는 가급적 함수 호출을 줄여야 합니다. 그래서 최적화를 위해 함수 호출을 inline 으로 바꾸는 방법이 사용될 정도입니다.

클럭이 수~수십 MHz에 불과하고 캐쉬도 엄청 작고, 크로스 컴파일러 버전도 더이상 업데이트 되지 않는 임베디드 환경이 아니라면 (적어도 최신 PC 기반 동작 환경이라면) 가급적 readable 하고 정확하게 주석이 달린 코드를 작성하는 것이 훨씬 도움이 되는 일입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.