2010-05-22 2 views
3

값이 32,767보다 높지 않을 것으로 예상되는 곳에서 Int32를 사용해야합니까?Int32 또는 필요한 것을 사용하십시오

저는 메모리를 절약하고 싶습니다. 간단한 산술을 수행하기 위해 캐스트를 사용하는 것이 성가시다.

short a = 1; 

short result = a + 1; // Error 

short result = (short)(a + 1); // works but looks ugly when does lots of times 

전반적인 응용 프로그램 성능은 어떻습니까?

+0

'L'과 같은 반바지와 바이트에는 숫자가 붙지 않습니다. –

+0

질문의 소리가 잘못되었습니다. "Int16을 장소에서 사용해야합니까?"라는 말이 아닙니까? –

답변

4

대용량 배열을 만드는 경우 배열의 크기가 "type width"* ""요소 수 + 오버 헤드이므로 좁은 형식 (적은 바이트)을 사용하려면 상당한 양의 메모리를 절약 할 수 있습니다 ".

그러나 클래스 및 구조체에서 기본적으로 전체 단어 경계를 따라 포장됩니다. 32 비트 = 4 바이트. short는 여전히 4 바이트 공간에 압축됩니다. 당신은 그러나, 수동으로 구조체에 포장 구성 할 수 있습니다

구조 레이아웃을 사용하여 클래스를 : \

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute(VS.71).aspx 어떤 성능 관련 문제와 마찬가지로 "생각하지 않는다 - 측정".

API 관점에서 보았을 때, 대부분의 API가 int를 사용하는 것처럼 보이므로 반바지에서 int로 캐스팅을 유지해야하는 것은 큰 문제가 될 수 있습니다.

+0

MSDN에서이 문장을 어떻게 작성 하느냐 "힙에 할당되는 개체가 적을수록 가비지 수집기의 작업이 줄어 듭니다.개체를 할당 할 때는 15 바이트 만 필요할 때 32 바이트 배열을 할당하는 것과 같이 필요 이상으로 반올림 된 값을 사용하지 마십시오.? –

+0

문구가 조금 이상하지만 실제로는 무엇을 할당 할 것인가? (나는 그들이 바이트 배열을 참조하고 있다고 생각한다.) 아마도 이것은 포인터를 가로 지르는 가장 좋은 예가 아니다 - 할당 된 객체의 수를 감시하는 것이 중요 할 수있다. 힙 관리 및 가비지 수집은 성능 카운터 인 "GC에서 소비 한 시간"을 프로세스에 대해 조사하는 것이고, 이것이 50 % 이상으로 높으면 프로그램이 대부분 가비지 수집에 소요됩니다. –

8

내가 아는 한 가능한 한 항상 int를 사용하는 것이 좋습니다. 많은 아키텍처에서 int 크기가 워드 크기와 같기 때문에 일부 산술 연산에서 short를 사용하면 약간의 성능 저하가있을 수 있습니다.

+2

16 비트 응용 프로그램이 32 비트 Windows로 이식 된이 몇 년 전에 살펴 봤습니다. 적어도 당시 인텔 아키텍처에서는 16 비트 수학이 실제로 32 비트 프로세서에서 느려졌습니다. 거대한 배열 (즉, 메모리 손실이 성능 손실보다 큽니다)이 아니라면 int를 사용하십시오. –

0

수천 명의 회원을 생성하지 않는 한, 여기 저기에있는 소수의 바이트만으로도 공간 절약 효과가 발생하지 않습니다. 나는 조숙 한 최적화의 격언이 여기에 적용된다고 생각한다. 그것은 당신을 기분 좋게 만들지 만, 당신은 특별히 측정 할 수있는 것을 얻지 못합니다. IMO - 실제로 많은 메모리를 사용하는 경우에만 메모리 사용을 최적화합니다.

1

나 INT32보다 작은 정수 데이터 형식을 사용하는 3 가지 이유 : 심각한 메모리 제약

  1. 시스템을.
  2. 거대한 배열 또는 이와 유사합니다.
  3. 코드의 목적을 읽고 이해하기가 더 쉬울 것이라고 생각합니다.

저는 보통 일반적인 Windows 응용 프로그램을 사용하기 때문에 일반적으로 중요한 문제는 제 3의 문제입니다.

관련 문제