본문 바로가기
코스웨어/졸업생

[토론 in] 전역변수는 왜 쓰면 안될까?

by 알 수 없는 사용자 2015. 3. 17.
728x90
반응형

일단 제가 생각하는건 2가지정도


1. 전역변수 사용시 프로그램이 복잡해지고, 디버깅이 어려우며, 멀티 쓰레드 환경에서 동기화가 어려움.

   선배들한테 듣기로는 피쳐폰 개발시 전역변수 잘못쓰고, 빠따질 당한적 많다고 들음......


2. 속도문제. 전역변수는 죽어도 레지스터에 할당 안됨. <- 사실 이 내용은 원리이해나 코드레벨 증명은 안햇으나...

   코드최적화 관련글 찾아보다가 발견함.


   물론 레지스터 변수가 확정적인것도 아니고, 안붙여도 지역변수가 레지스터에 할당 될 수 있으나,

   개선의 여지가 충분하고도 넘치기 때문에...


-----------------------------------------------------------------------------------------------------------

10 전역 변수
전역 변수는 절대 레지스터에 할당할 수 없다. 포인터를 사용하여 간접적으로 할당하거나 함수호출을 이용해서 전역변수를 변환할 수 있다.

따라서 컴파일러는 전역변수의 값을 레지스터에 올려서 캐쉬할 수 없게 되고 때문에 글로벌 변수를 이용할 때마다 다시 읽어들이는 오버헤드가 생기게 된다. 그러므로 가능하면 글로벌 변수를 직접 호출하는 대신에, 로컬변수를 이용해서 필요한 연산을 하고 그 결과를 글로별 변수에 할당하는 방법을 사용해야 한다.

int f(void);
int g(void);
int h(void);
int errs;
 
void test1(void)
{
  errs += f();
  errs += g();
  errs += h();
}
 
void test2(void)
{
  int localerrs = errs;
  localerrs += f();
  localerrs += g();
  localerrs += h();
  errs = localerrs;
}

-----------------------------------------------------------------------------------------------------------


더 알아야할 사실이나, 토론 환영합니다.


타올라라 장작아...




728x90

'코스웨어 > 졸업생' 카테고리의 다른 글

지금부터  (9) 2015.04.30
[정보공유] sparse file format  (5) 2015.04.28
[정보공유] 라이브러리 빌드에 관한글  (5) 2015.03.27
[정보공유] 사운들리  (9) 2015.03.24
서울에 주쌤교도가 있다합니다  (12) 2015.03.17
[12년 정철] 우와......  (10) 2015.02.27
[12년 정철] 커널관심 있으신분?  (11) 2015.02.05
저도 선배 부심 한번  (17) 2015.02.03