블로그 이미지
SITD

카테고리

분류 전체보기 (34)
1.DB (4)
2.OS (3)
3.PROGRAMMING (14)
4.학업 (0)
5.영어 (0)
6.KSIT (5)
7.증권 (1)
8.EXCEL (0)
9.Graduate (2)
기타 (5)
Total60,285
Today0
Yesterday25

달력

« » 2011.9
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

공지사항

태그목록

'2011/09'에 해당되는 글 2건

  1. 2011.09.21 분할 컴파일 시 템플릿 함수의 위치
  2. 2011.09.21 공유메모리 관련한 메모리 이슈
결론만 간단히, .h파일에 넣어서 처리했다.

템플릿 함수의 경우 h에 선언을 넣고 cpp에 정의를 넣었을 때,

오브젝트 파일 만들 때는 오류가 발생하지 않지만, 다른 소스에서 해당 헤더를 참조하여 컴파일할 때 오류가 발생한다.

이런 함수는 선언된 적이 없다는 오류인데(undefined reference to), 

해결 방법은 3가지 정도 있는 듯 하다

1. template(typename T> 위에 export를 둔다

2. #include "xx.cpp" 를 추가한다.

3. 헤더 파일이 구현 부를 넣는다.

이중 1번은 export를 수행하는 컴파일러가 있는지 없는지도 불분명할 정도로 보편적이지 않고, 옳지 않다는 의견이 많다.
2번은 표준에 상당히 위배된 느낌이라서 3번을 사용했다.
템플릿 함수의 특성 때문에 헤더 파일에 소스를 추가할 경우, 확장자를 hpp로 하자는 의견도 있는데(출처 2) 여기까진 안했다.

컴파일 할 때 순서에 따른 문제가 아닐까 싶은데, 정확한 원인은 모르겠다.
단지, 템플릿 함수는 컴파일 타임에 템플릿 함수를 호출하는 객체들의 형태에 맞는 소스를 만든다고 들었다
(즉, typename T로 int, float, double이 들어간다면, 3가지 타입의 함수를 자동으로 만든다)
이게 .h에 있을 땐 가능한데(정확힌 include됐을 때), .cpp에 있을 땐 컴파일 타임에 못 만드는게 아닐까 싶다.



출처 1 :  http://ttriton.tistory.com/tag/undefined%20reference%20to
출처 2 :  
http://kldp.org/node/47258 

'3.PROGRAMMING > C++ Programming' 카테고리의 다른 글

분할 컴파일 시 템플릿 함수의 위치  (0) 2011.09.21
Posted by SITD

댓글을 달아 주세요

1. 프로세스에서 가리키는 주소는 해당 프로세스 안에선 절대적인 위치값이지만, 이는 그 프로세스 안에서만 해당한다.
    즉, 프로세스 A와  프로세스 B가 있을 때 서로 100번지를 강제로 가리킨다고 해보자. 
    일반적으로 프로세스가 관리하는 메모리끼리는 관여가 불가능하지만 A 프로세스 종료 후 B프로세스를 생성했을 경우나 공유 메모리의 경우로 가정했을 때,
    A에서 100번지에 값을 넣고 B에서 100번지의 값을 읽을 때 실제론 서로 다른 메모리 위치를 사용하게 된다.
    프로세스에서 사용하는 메모리 주소는 물리 주소가 아니라 MMU에 의해 변경된 논리 주소이기 때문이다.

2. 그렇다면 공유메모리의 값을 다른 프로세스가 공유하려면 어떻게 해야 하는가?
    상대적인 위치값을 기록해서 shmget, shmat를 이용해 리턴된 주소에 포인터 연산을 해서 구한 주소를 사용해야 한다.
    즉, 1000만큼의 메모리를 shmget로 할당했다고 했을 때, 실제 객체가 저장된 위치가 그 중간이라면, 500이란 값을 공유메모리 변수에 저장해 둔 후, 이후 다른 프로세스에서 참조시, shmget -> shmat를 수행한 후 리턴된 주소에 + 500을 한 위치의 값을 사용하면 된다.
 
출처
 : http://kldp.org/node/38864
Posted by SITD

댓글을 달아 주세요

최근에 달린 댓글

글 보관함