공유 라이브러리의 동적으로 연결된 전역 및 정적 변수
로드 시 동적 연결
응용 프로그램이 로드 시간 연결을 사용하여 모듈 A에 동적으로 연결되면 운영 체제는 DLL의 코드와 데이터를 애플리케이션의 주소 공간에 넣습니다. 애플리케이션에는 데이터 세그먼트에 로드된 A의 전역 및 정적 변수의 자체 복사본이 있습니다.
런타임 동적 연결
런타임 동적 연결을 사용하면 응용 프로그램은 필요할 때만 DLL의 코드와 데이터를 로드합니다. 애플리케이션은 A의 전역 및 정적 변수에 대한 자체 복사본을 가져오지 않습니다. 대신 로드된 DLL에서 직접 액세스합니다.
가시성 및 범위
모든 경우에 정적 변수는 해당 변수가 정의된 모듈 내에서만 표시됩니다. 그러나 전역 변수에는 다른 가시성 규칙이 있습니다.
Windows:
Unix 계열 시스템:
다중 애플리케이션
여러 애플리케이션이 모듈 A와 B를 사용하는 경우 서로 다른 프로세스에 있더라도 각 애플리케이션에 대해 전역 및 정적 변수의 별도 복사본이 생성됩니다.
응용 프로그램 전역 변수에 대한 DLL 액세스
DLL은 연결된 응용 프로그램의 전역 변수에 직접 액세스할 수 없습니다. 애플리케이션의 전역 변수를 조작하려면 DLL은 애플리케이션에서 제공하는 내보낸 함수를 사용해야 합니다.
결론
동적으로 연결된 공유에서 전역 및 정적 변수의 동작 라이브러리는 Windows와 Unix 계열 시스템에 따라 다릅니다. Windows는 모듈 간 전역을 엄격하게 분리하는 반면 Unix와 같은 시스템은 로드 시 동적 연결 중에 전역을 공유할 수 있습니다. 일반적으로 공유 라이브러리로 작업할 때는 전역 변수를 사용하지 않는 것이 좋습니다.
위 내용은 전역 및 정적 변수는 다양한 운영 체제에 걸쳐 동적으로 연결된 공유 라이브러리에서 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!