국부 변수, 전역 변수, 더미, 창고, 정적 과 전역 의 차이

3095 단어 c 언어
일반적인 전역 변 수 는 데이터 구역 에 저장 되 고 국부 변 수 는 창고 구역 에 저장 되 며 동적 변 수 는 더미 구역 에 저장 되 며 함수 코드 는 코드 구역 에 저장 된다.
스 택 구역 은 일반적인 스 택 데이터 구조 로 LIFO 후진 선 출 규칙 에 따라 부분 변 수 는 ASM 에 배정 되 었 을 때 규정 되 어 있 습 니 다. 그러면 한 함수 가 끝 난 후에 스 택 을 균형 시 킬 수 있 습 니 다. 조작 이 간단 하고 효율 이 높 은 스 택 (디지털 구조 중의 더미 와 헷 갈 리 지 마 세 요) 은 프로그램 이 컴 파일 할 때 발생 하 는 동적 메모리 배분 에 사용 하 는 블록 입 니 다.스 택 을 조작 하 는 것 은 매우 번 거 로 운 일이 다. 분배 할 때 가장 좋 은 주 소 를 판단 해 야 한다 (쓸모없는 메모리 조각 이 발생 하 는 것 을 방지 해 야 한다 (여러 번 의 NEW 와 DELETE 로 인해 발생 하 는 두 개의 사용 중 메모리 에 끼어 있 는 빈 메모리 (쉽게 분배 되 지 않 음). 분배 와 회수 시의 효율 이 스 택 보다 훨씬 낮 고 스 택 은 시스템 이 제공 하 는 기능 으로 빠 르 고 효율 적 이 며 단점 은 제한 이 있 고 데이터 가 유연 하지 않다 는 것 이다.한편, 스 택 은 함수 라 이브 러 리 가 제공 하 는 기능 으로 유연성 이 있 고 편리 하 며 데이터 적응 면 이 광범 위 하지만 효율 > 어느 정도 낮 아진 것 이 특징 이다.스 택 은 시스템 데이터 구조 로 프로 세 스 / 스 레 드 에 유일한 것 입 니 다.더 미 는 함수 라 이브 러 리 내부 데이터 구조 로 반드시 유일한 것 은 아니다.서로 다른 메모리 가 서로 작 동 하지 않 습 니 다.
스 택 공간 은 정적 분배 와 동적 분배 두 가지 로 나 뉜 다.정적 분 배 는 컴 파일 러 가 완성 한 것 입 니 다. 예 를 들 어 자동 변수 (auto) 의 배분 입 니 다.동적 분 배 는 alloca 함수 로 이 루어 집 니 다.창고 의 동적 분 배 는 방출 할 필요 도 없고 방출 함수 도 없다.이식 가능 > 프로그램 을 위해 스 택 의 동적 배분 작업 은 격려 되 지 않 습 니 다!쌓 아 올 리 는 공간의 분 배 는 항상 동적 입 니 다. 프로그램 이 끝 날 때 모든 데이터 공간 이 시스템 으로 방출 되 지만 정확 한 신청 메모리 / 메모리 방출 > 배 치 는 좋 은 프로그램의 기본 요소 입 니 다.이것 은 제 가 쌓 기와 창고 에 소장 한 내용 입 니 다. 쌓 기 는 프로그래머 가 관리 하 는 것 이 고 스 택 은 시스템 관리 입 니 다.
또한 정적 과 전역 에 관 한 문제 들:
정적 변수의 특징:
1. 1 차 저장: 정적 부분 변 수 는 한 번 만 초기 화 되 고 다음 초기 화 는 지난번 결과 값 에 따라 c + 중 류 의 정적 구성원 변수 와 유사 합 니 다. 즉, 이 유형 이 몇 개의 인 스 턴 스 대상 을 생 성하 든 모든 대상 은 하나의 정적 변 수 를 공유 합 니 다. 여기 서 이 함수 가 몇 번 호출 되 든 이 정적 변 수 는 한 번 만 초기 화 됩 니 다.생존 기간 을 초과 하여 소각 되 지 는 않 았 으 나 외부 에서 볼 수 없 을 뿐 예 를 들 어 설명 한다.
void fun1(int v)
{
    static int value=v;
    static int value=v;
}

int main(int arc,char*args[])
{
    fun1(50);
    fun1(100);
}

실행 결 과 는 value: 50 value: 50 은 두 번 째 fun 1 () 을 호출 할 때 초기 화 value 의 값 을 사용 한 것 을 설명 합 니 다. value 는 정적 구역 의 저장 공간 에서 fun 1 () 의 끝 으로 방출 되 지 않 았 습 니 다. 즉, 한 번 의 저장 소 를 나 타 냈 습 니 다.
2. 역할 영역 한정: 정적 수식 의 역할 영역 한정 기능 은 함수 와 변수 에 동시에 나타난다.
a) 함수 에 있어 서 static 로 수식 하 는 모든 함수 의 역할 영역 은 현재 원본 파일 일 뿐 외부 에 서 는 이 함수 가 보이 지 않 습 니 다. 즉, 같은 원본 파일 에 있 는 함수 만 이 정적 함 수 를 호출 할 수 있 습 니 다.반대로 한 함수 가 같은 소스 파일 의 다른 함수 에 만 호출 된다 면 이 함 수 는 정적 이 라 고 밝 혀 야 합 니 다. 이렇게 하 는 장점 은 서로 다른 소스 파일 간 함수 의 이름 충돌 문 제 를 어느 정도 해결 할 수 있다 는 것 입 니 다.
b) 변수 에 있어 static 수식 의 전역 변 수 는 현재 원본 파일 에서 만 유효 하고 외부 에 서 는 볼 수 없 으 며 외부 파일 은 참조 할 수 없습니다.
말 그대로 전역 변 수 는 전역 에서 인용 할 수 있 는 변 수 를 말 하 는데 국부 변수의 개념 에 비해 외부 변수 라 고도 부른다.정적 변수 와 마찬가지 로 전역 변 수 는 정적 데이터 구역 에 위치 하고 전역 변 수 는 한 곳 에서 정의 되 며 여러 곳 에서 참조 되 며 키워드 'extern' 으로 '외부' 변 수 를 참조 합 니 다.
전역 변수 도 정적 일 수 있 습 니 다. 앞에서 설명 한 바 와 같이 정적 전역 변수의 의 미 는 '외부' 가 인용 하지 못 하 게 하 는 것 입 니 다. 하나의 소스 파일 의 전역 변수 입 니 다. 즉, 컴 파일 단계 의 전역 변수 입 니 다. 연결 단계 의 전역 변수 가 아 닙 니 다.
위의 분석 을 통 해 우 리 는 다음 과 같은 결론 을 얻 기 어렵 지 않다.
1. 정적 함수 와 일반 함수 의 차 이 는 정적 함수 가 같은 소스 파일 이외 의 함수 에 호출 되 어 서 는 안 된다 는 것 이다.
2. 정적 부분 변수 와 일반 부분 변수의 차 이 는 정적 부분 변 수 는 한 번 만 초기 화 되 고 다음 초기 화 는 실제 적 으로 지난번 변수 입 니 다.
3. 정적 전역 변수 와 일반 전역 변수의 차 이 는 정적 전역 변수의 역할 영역 은 원본 파일 에 만 한 정 됩 니 다.

좋은 웹페이지 즐겨찾기