커널 소스에서 지역 변수와 자동 변수를 많이 사용하는 이유는
글쓴이: gurugio / 작성시간: 금, 2004/07/16 - 8:57오후
예를 들어서 __alloc_pages 함수를 보면
for (;;) {
zone_t *z = *(zone++);
if (!z)
break;
...
이런 부분이 있는데요 왜 z 변수를 함수 초기에 선언해서 다음과 같이
하지 않은걸까요?
__alloc_pages(..)
zone_t *z;
..
for (;z++;z != NULL)
{
..
}
스택 사용에 있어서 조금 다르겠지만 속도가 좀더 나오거나하는
장점이 있나요?
커널 곳곳에 보면 쉬프트나 &등을 이용해서 산술 연산을 하는 것은
속도에 장점이 있겠지만 이런 특징들은 단순히 코딩 습관이 아니라
뭔가 이유가 있는것 같습니다.
Forums:
별 차이 없습니다.컴파일만 해서 *.s 파일만 보셔도 금새 아시겠
별 차이 없습니다.
컴파일만 해서 *.s 파일만 보셔도 금새 아시겠지만요.
제 생각에는 루프안에 지역 변수 선언이 있다면스택을 다루는 횟수가
제 생각에는 루프안에 지역 변수 선언이 있다면
스택을 다루는 횟수가 많아져서 손해일것 같습니다.
만약 함수 안에 한번만 선언하면 스택을 한번만 잡으면 되지만
루프안에 있으면 루프를 돌때마다 스택을 잡았다가 해제해야할것 같습니다.
만약 컴파일러가 최적화를 해서 그걸 한번만 선언해서 계속
사용한다면 문제가 없겠지만요.
커널 소스가 이상하게 보이는 것은 제가 이해하지 못해서 이겠죠? oops
[quote="gurugio"]제 생각에는 루프안에 지역 변수 선언이 있
저도 블록 안에서 선언한 변수에 필요한 스택은 그 블록에 들어갈 때 잡힌다고 생각하고 있었는데.. 아니더군요. 예전에 아주 작은 스택에서 작업할 일이 있을 때 스택을 절약한답시고 여러개 블록을 만들어서 그 안에 변수를 선언했는데.. 실제로는 함수 전체에 한 덩어리로 잡혔었습니다.
요즘에 제가 블록 안에 변수를 선언하는 이유는 스택을 절약하기 위한 것도 아니고 읽기 좋게 하기 위한 용도인 것 같습니다.
아.. 저는 어셈블된 소스를 확인안해봤는데역시 한번에 잡아주는 군
아.. 저는 어셈블된 소스를 확인안해봤는데
역시 한번에 잡아주는 군요..
고맙습니다 D
댓글 달기