>백엔드 개발 >C++ >전역 및 정적 변수는 다양한 운영 체제에 걸쳐 동적으로 연결된 공유 라이브러리에서 어떻게 작동합니까?

전역 및 정적 변수는 다양한 운영 체제에 걸쳐 동적으로 연결된 공유 라이브러리에서 어떻게 작동합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 05:45:14855검색

How Do Global and Static Variables Behave in Dynamically Linked Shared Libraries Across Different Operating Systems?

공유 라이브러리의 동적으로 연결된 전역 및 정적 변수

로드 시 동적 연결

응용 프로그램이 로드 시간 연결을 사용하여 모듈 A에 동적으로 연결되면 운영 체제는 DLL의 코드와 데이터를 애플리케이션의 주소 공간에 넣습니다. 애플리케이션에는 데이터 세그먼트에 로드된 A의 전역 및 정적 변수의 자체 복사본이 있습니다.

런타임 동적 연결

런타임 동적 연결을 사용하면 응용 프로그램은 필요할 때만 DLL의 코드와 데이터를 로드합니다. 애플리케이션은 A의 전역 및 정적 변수에 대한 자체 복사본을 가져오지 않습니다. 대신 로드된 DLL에서 직접 액세스합니다.

가시성 및 범위

모든 경우에 정적 변수는 해당 변수가 정의된 모듈 내에서만 표시됩니다. 그러나 전역 변수에는 다른 가시성 규칙이 있습니다.

Windows:

  • 외부 전역 변수는 정의 모듈 외부에서 표시되지 않습니다.
  • 전역 변수를 내보내려면 DLL에서 __declspec(dllexport)를 사용하고 DLL에서 __declspec(dllimport)을 사용하여 선언해야 합니다. 모듈 가져오기.

Unix 계열 시스템:

  • 외부 전역 변수는 로드 시 동적 연결 중에 로드된 모든 모듈에서 표시되고 공유됩니다.

다중 애플리케이션

여러 애플리케이션이 모듈 A와 B를 사용하는 경우 서로 다른 프로세스에 있더라도 각 애플리케이션에 대해 전역 및 정적 변수의 별도 복사본이 생성됩니다.

응용 프로그램 전역 변수에 대한 DLL 액세스

DLL은 연결된 응용 프로그램의 전역 변수에 직접 액세스할 수 없습니다. 애플리케이션의 전역 변수를 조작하려면 DLL은 애플리케이션에서 제공하는 내보낸 함수를 사용해야 합니다.

결론

동적으로 연결된 공유에서 전역 및 정적 변수의 동작 라이브러리는 Windows와 Unix 계열 시스템에 따라 다릅니다. Windows는 모듈 간 전역을 엄격하게 분리하는 반면 Unix와 같은 시스템은 로드 시 동적 연결 중에 전역을 공유할 수 있습니다. 일반적으로 공유 라이브러리로 작업할 때는 전역 변수를 사용하지 않는 것이 좋습니다.

위 내용은 전역 및 정적 변수는 다양한 운영 체제에 걸쳐 동적으로 연결된 공유 라이브러리에서 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.