2016-09-02 2 views
0

여러 프로그램에서 상당한 시간을 소비 한 결과 플랫폼에 따라 RAM 사용량을 줄여야하는 경우가 종종있었습니다. 일부 플랫폼의 리소스가 매우 제한되어 있기 때문에 일반적으로 이러한 유형의 관점에서 대형지도와 행렬을 저장하므로 int32에서 int16으로 또는 float에서 double로 전환하면 (실제 크기가 다른 경우) 쉽게 내 사용을 거의 절반까지 줄일 수 있습니다. 같은 따라서, 나는 방금 추가 한 재정의 :이 날 빨리 내 프로그램의 모든 중요한 기본 유형을 조정할 수 있습니다RAM 사용량, 가독성 및 성능 향상을 위해 기본 유형 재정의

typedef double Float; 
typedef int32_t Int; 
typedef uint32_t UInt; 

. 프로그램의 정수 중 실제로 정수가 2 바이트 크기를 초과하지 않으므로 int16에서 int64 중 하나를 사용하여 문제가되지 않습니다.

또한 "uint32_t"대신에 "Int"가 있어야 읽을 수있는 것처럼 보입니다. 그리고 어떤 경우에는 원시 타입의 크기를 줄이고 크기를 증가시킴으로써 성능의 변화를 관찰했습니다.

내 질문은 : 내가 놓친 단점이 있습니까? 나는 아직이 주제에 관해서는 아무 것도 찾을 수 없었습니다. 그래서 나는 그 사실을 놓친다면 저를 이끌어주십시오. 이 코드는 주로 나를위한 것이고, 다른 사람들은 그것을 볼 수도 있지만, 모든 경우에 개인적으로 또는 적절한 문서로 제공 될 것입니다.

편집 : 지난 실수로 미안하지만 실제로는 typedef를 사용합니다.

+0

잘 그들이 사용하지 않는 때문에 "단점은"나는 다른 사람과 코드를 공유 할 때 볼 수 있었다 typedef에. 경계를 확인하는 경우 numeric_limits를 사용하고 코드를 하드 코드하지 않아야합니다 (일반적으로 항상 더 좋습니다). 유형을 더 작은 것으로 변경하면 경계도 변경됩니다. – Hayt

+0

@Hayt 주석 주셔서 감사합니다. 예 일반적으로 숫자 제한을 사용하는 것에 대해 생각해 보았습니다. 그러나 내가 도달하는 가장 큰 정수는 대략 2000-3000 크기이며 내 프로그램에서이를 초과 할 수있는 방법이 없습니다. 부동 소수점의 경우 유사합니다. – phil13131

+0

작은 유형의 범위를 절대 초과하지 않는 경우 무조건 사용하지 않을 이유가 있습니까? 또한 현대 건축물에 'Int'라는 형식을 비밀리에 두는 것에 불과하다는 생각은 두려운 것입니다. –

답변

2

typedef int32_t Int;은 불량이지만 typedef double Float;은 좋지 않습니다. 혼동 스럽기 때문에 Float은 사실 두 배입니다.

작은 유형에 대한 두 가지 유형의 세트, 유형의 하나 하나를 정의하는 전처리를 사용하지 마십시오. g++ -o test test.cpp -DLARGE

작은 유형을 사용하려면 :

#ifdef LARGE 
typedef int32_t Int; 
typedef double Real; 
#else 
typedef int16_t Int; 
typedef float Real; 
#endif 
void f() { 
    cout << sizeof(Int) << endl; 
    cout << sizeof(Real) << endl; 
} 

유형 사용 g++ -o test test.cpp

+0

전처리 기가 정의하는 것과 같습니다. 작은/큰 것이 항상 그것을 커버하지는 않을 것이기 때문에 좀 더 조정할 필요가 있지만, 나는 그렇게 할 것입니다. "Real"은 추가적으로 매우 좋은 이름입니다. 과거에 FloatPt라는 이름을 사용하여 일반적인 부동 소수점을 참조했습니다. 그러나 "Real"이 실제로 더 좋습니다. – phil13131

관련 문제