C 또는 C++에서 컴파일시간에 결정가능한 상수에 대해 질문드립니다.
글쓴이: twinwings / 작성시간: 화, 2014/05/06 - 11:06오후
#include <stdio.h> #include <stdlib.h> #include <limits.h> static unsigned int arr[UCHAR_MAX][UCHAR_MAX]; void main() { for (int i = 0; i < UCHAR_MAX; i++) { for (int j = 0; j < UCHAR_MAX; j++) arr[i][j] = i*j; } }
제목이 요상하군요. 뭐라고 적어야 할 지..
매우 간단합니다. 그냥 큰배열이 미리 계산해놓은 값들을 저장하려고 하는데요.
(정적인 라우팅 테이블이라던가..뭐 그런것이 되겠지요..)
이렇게 하면 문제점이 매번 실행시 똑같은 배열을 초기화 한다는 겁니다.
즉, 제가 원하는것은 어차피 런타임에 바뀌는 자료가 아니니, 컴파일시간에 계산을 완료하고
실행파일에 그 정보를 넣고싶은겁니다.
제가아는 해결법은 TMP 기법이 있지만..다른 쉬운 방법이 없을까요?
Forums:
여러 가지 방법이 있겠네요
결과를 바이너리 값이나 기타 공간에 한 번 저장한뒤에 이걸 배열 초기화용 소스코드로 변환시켜주는 툴을 사용하거나 자작하든지.
결과값을 저장하는 바이너리를 리소스 형태로 실행파일에 포함시켜버리든지
처음 실행했을때 계산값을 임시파일에 저장하고 다음번부터는 그 임시파일을 읽는다든지 (데이터를 유출하면 안되거나 단순한 계산일 경우에는 의미가 없겠지만..)
프리프로세서로 해결하든지 (루프를 구현해둔 예제를 쉽게 찾을 수 있습니다) 등등.
--
TMP를 제외시킨 이유가 있으신가요? objcopy로
TMP를 제외시킨 이유가 있으신가요? objcopy로 실행 파일에 넣는 방법도 어렵진 않지만 컴파일러가 해당 데이터를 컴파일 타임에 알 수가 없어 최적화에 다소 손해를 보지 않을까 싶습니다. 프리프로세서로 처리하는 방법은 거의 Write once, read never 수준이라 추천해드리고 싶지가 않네요.
D에서는 쉽게 되는데... C++은 TMP가 제일
D에서는 쉽게 되는데... C++은 TMP가 제일 나을것 같네요.
$ echo "What do you want?" >
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기