정적 변수를 사용하면 코드의 가독성이 모호하지만 특별한 것은 없다고 생각했습니다. 하지만 이제는 텍스트, 데이터, bss, 힙, 스택의 5 가지 데이터 세그먼트가 있다는 것을 알고 있습니다. 텍스트 세그먼트는 코드, 데이터 세그먼트 용입니다. 선언 된 변수, bss seg입니다. 선언되지 않은 변수, 힙은 포인터, 스택은 함수 변수입니다.
프로그램이 실행될 때 컴퓨터에서 차지하는 크기를 최소화하기 위해 로컬 변수보다 정적 변수를 사용하지 않는 것이 더 낫습니까?
정적 변수와 전역 변수가 bss 또는 데이터 세그먼트에 저장되어 있다고 확신합니다. 그리고 bss 및 데이터 세그먼트의 크기는 컴파일 후에도 변경되지 않습니다. 힙과 스택의 경우 사용하면 해제되므로 크기에 대해 걱정할 필요가 없습니다.
나는 이것을 생각하는 것이 맞습니까?
텍스트 세그먼트는 코드, 데이터 세그먼트 용입니다. 선언 된 변수, bss seg입니다. 선언되지 않은 변수 용
지금까지 당신이 옳습니다.
힙은 포인터 용입니다.
아니요. 힙은 malloc()
C ++의 경우 new
.
포인터는 어디에 두든 저장됩니다 (데이터, bss, 스택).
함수의 변수에 대한 스택.
그리고 함수 인수를 위해.
프로그램이 실행될 때 컴퓨터에서 차지하는 크기를 최소화하기 위해 로컬 변수보다 정적 변수를 사용하지 않는 것이 더 낫습니까?
변수가 존재하는 동안 크기는 상당히 동일합니다 (데이터 / bss 대 스택). 존재하지 않는 경우 스택 기반 접근 방식이 이깁니다.
스택 기반 접근 방식은 재진입 (이미 말했듯이) 및 가독성과 같은 다른 측면에서도 유리합니다.
힙과 스택의 경우 사용하면 해제되므로 크기에 대해 걱정할 필요가 없습니다.
물론 여기에서도 크기에 대해 걱정해야합니다. 가서 16MiB 크기 (적어도 32 비트 머신에서)의 백만 청크를 할당하십시오. 그러면 다음을 볼 수 있습니다.
static
필요할 때 변수 를 사용 하고 필요하지 않으면 다른 변수를 사용해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다