공유 메모리를 사용하여 여러 응용 프로그램에서 데이터를 저장하고 사용할 수 있다는 것을 알고 있습니다. 공유 포인터에 함수 포인터를 저장할 수 있습니까? 내 공유 객체에서 다른 응용 프로그램의 반환 값과 매개 변수가 동일한 함수로 돌아갑니다.함수 포인터를 공유 메모리에 저장하십시오.
1
A
답변
2
번호는 어떻게 든 두 프로세스에서 동일한 주소에서로드 할 수있는 코드를 공유 메모리 영역으로 코드를로드하거나 발생하지 않는 한
, 함수 포인터가 유효하지 않습니다.
0
당신이하고있는 일을 완전히 확신하지 못한다면, 공유 메모리 세그먼트에 함수 포인터를 저장하는 것은 나쁘다고 생각합니다. 프로세스가 권한이없는 함수 포인터에 액세스 할 수 있습니다. 결국 프로그램이 망가질 수 있습니다.
-1
당신이 원한다면 아니, 함수 포인터를 공유 할 수 없습니다, u는 그 함수의 라이브러리를 만들고 공유 라이브러리가 동일한 주소로로드 될 것이라고 보장 할 수 없습니다
0
프로세스에서 사용합니다 두 가지 다른 응용 프로그램. 더 나쁜 경우에, 주소 공간 레이아웃 무작위 화로 인해 임의의 임의의 주소에 라이브러리를로드 할 수 있습니다. 따라서 함수 포인터는 불변하지 않으므로 아무 곳에 나 저장할 수 없습니다.
솔루션으로 두 프로세스 모두에서 가능한 모든 콜백을 사용하여 함수 테이블을 만들고 공유 메모리의 함수에 오프셋을 저장할 수 있습니다. 확실히, 그 테이블은 정확히 동일해야합니다.
[공유 메모리 세그먼트 내의 포인터] 가능한 복제본 (https://stackoverflow.com/questions/10776762/pointers-inside-shared-memory-segment) – Aravind
가능한 복제본 [여러 프로세스에서 함수 포인터를 사용할 수 있습니까? ?] (https://stackoverflow.com/questions/1561620/is-it-possible-to-use-function-pointers-across-processes) – Marc
@Aravind는 함수 포인터가 아닌 데이터를 요청합니다. –