큰 파일에 Constants.h
파일이 있는데 약 200 개의 변수 (대부분은 배열)가 선언되고 초기화됩니다. 네임 스페이스를 사용하고 있습니다.헤더 파일에 선언 및 초기화가 너무 많음 C++
METHOD 1
//Constants.h
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
namespace LibConstants
{
const int a = 12;
const std::string theme[2]; = {"themeA", "themeB"};
const int arr[2] = {1, 2};
// and around 200 more declarations with initialization
}
#endif
.h
이 파일은 거의 모든 .cpp
파일 만 아주 최소한의 변수 LibConstants::theme[0]
같이 사용중인 각 타임 #include
이다.
내 방식은 정상적으로 작동하지만 불필요하게 메모리를 할당합니까? 접근 방식에 따라 .h
파일의 변수 만 정의하고 .cpp
으로 초기화해야합니까? 아래 코드에서
처럼 : 방법 2 :
//Constants.h
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
namespace LibConstants {
std::string getMyTheme(int arg);
std::string getMyThemeName(int arg);
const int a;
const std::string theme[2];
const int arr[2];
// and around 200 more declarations with initialisation
};
#endif
이
처럼 사용 CPP 파일//Constants.cpp
#include LibConstants.h
using namespace LibConstants {
std::string getMyTheme(int arg) {
theme[2] = {"themeA", "themeB"};
return theme[arg];
}
std::string getMyThemeName(int arg) {
...
}
}
에서 초기화 중
여기서 헤더 파일에 const std::string st[2];
으로 선언 된 배열을 제외하고 불필요한 변수에 대한 불필요한 메모리 할당은 발생하지 않습니다.
여기서 "arg = 0"은 런타임 관련입니다. 일부 변수가 런타임에 종속적이지 않고 컴파일 시간 만 종속적 인 경우 중요합니까? 해당 경우 .cpp
파일의 자리 표시 자 값을 간단히 바꿉니다.
내가 잘못하면 어디든지 수정하십시오.
컴파일 타임 상수는 헤더 또는 소스 파일에서 선언하고 초기화하는지 여부에 관계없이 대부분의 구현에서 데이터 세그먼트로 이동합니다. 예를 들어'int a [] = {/ * 큰 배열 * /}'이라고 가정 해 봅시다. 'a'는 상수가 아니지만 초기화 된 파일은 여전히 어딘가에 있어야하며 프로그램은 여전히 그것을로드해야합니다. 그래서이 경우 나는 그것이 물질적 인 차이를 만든다고 생각하지 않는다. 반면에, 변수가 생성자 또는 다른 방법으로 런타임 실행을 초기화해야하는 경우. 함수에서 랩핑하고 필요에 따라 작성하는 것이 좋습니다. –
@ YanZhou 빠른 답장을 보내 주셔서 감사합니다. 위의 두 메서드는 모두 컴파일 시간이 있고 메모리를 사용하지 않지만 각 .cpp 파일의 자리 표시 자만 바꿉니다. – myDoggyWritesCode
아니오 잠시 답을 작성하십시오. –