내 C 소스 코드 파일에서 아래의 두 줄을 사용하면 데이터 세그먼트와 텍스트 세그먼트가 정확히 어떻게됩니까?pragma 코드 섹션과 데이터 섹션의 용도는 무엇입니까?
#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")
내 C 소스 코드 파일에서 아래의 두 줄을 사용하면 데이터 세그먼트와 텍스트 세그먼트가 정확히 어떻게됩니까?pragma 코드 섹션과 데이터 섹션의 용도는 무엇입니까?
#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")
소스 (예 포함) : http://hi.baidu.com/jevidyang/blog/item/6d4dc436d87e3a300b55a918.html
참고 : #pragma
컴파일러 특정, 그래서 구문은 컴파일러에 따라 다를 수 있습니다.
DATA_SECTION pragma는 section name이라는 섹션에서 심볼을위한 공간을 할당합니다. C에서 프라 그마의 구문은 수 :
이#pragma DATA_SECTION (symbol, "section name");
은 C++에서 프라 그마의 구문이 될 수있다 : 당신은 당신이 연결할 데이터 객체가있는 경우
#pragma DATA_SECTION ("section name");
DATA_SECTION 프라그 유용 .bss 섹션과 별도의 영역으로
CODE_SECTION pragma는 section name이라는 섹션에서 func에 대한 공간을 할당합니다. CODE_SECTION pragma는 .text 섹션과 별도의 영역에 링크하려는 코드 객체가있는 경우에 유용합니다. C에서 프라 그마의 구문은 수 :
#pragma CODE_SECTION (func, "section name")
C에서 프라 그마 ++의 구문이 될 수있다 :
#pragma CODE_SECTION ("section name")
"이 C/C++ 구문은 ..."과 같은 것은 없습니다! DATA_SECTION 및 CODE_SECTION은 컴파일러에 따라 다르며 어떤 표준에서도 전혀 지원되지 않습니다. 일어날 일은 컴파일러에 달렸습니다. 나는 CODE_SECTION과 DATA_SECTION을 지원하지만 완전히 다른 구문을 가진 여러 컴파일러를 알고있다. – Lundin
내가 ** ** ** ** ** 일 수 있다면 **, ** 당신은 downvote를 제거 할 것인가? 물론'#pragma'는 컴파일러에 따라 다릅니다. – Stijn
예, 좋을 것 같습니다. 중요한 것은 이것이 어떤 표준에 의해 잘 정의되어 있다고 생각하도록 속이는 것이 아닙니다. 물론 언급 된 컴파일러가 없기 때문에 원래의 질문은 부족합니다. – Lundin
#pragma
는 "여기에 뭔가를 다음과 구현 정의이 컴파일러 특유의"를 의미한다. 따라서 일어날 일은 사용하는 컴파일러에 따라 다릅니다. 컴파일러가이 특정 pragma를 지원하지 않으면 모든 것이 무시됩니다.
그러나이 경우 상당히 분명합니다.
#pragma CODE_SECTION(func1, "Sec1")
은 "func1은 프로그램 메모리의 Sec1이라는 메모리 영역에 있어야합니다"라는 의미입니다. Sec1은 func1의 실제 코드가 할당되는 읽기 전용 메모리 위치입니다.
#pragma DATA_SECTION(globalvar1, "Sec2")
은 "globalvar1이 데이터 메모리의 Sec2라는 메모리 영역에 있어야합니다."를 의미합니다. Sec2는 변수 globalvar1이 할당되는 읽기/쓰기 위치입니다.
어떤 컴파일러를 사용하고 있습니까? – Lundin