2009-10-08 3 views
2

Java에서는 int으로 필드가 충분하고 어떤 이유로 long을 사용하면 메모리가 더 필요합니까? 유형에 따라 차이가 있습니까?Java에서 'int'보다 'long'을 선언하는 경우

+8

? 이것은 상당히 모호하며 컴파일러와 플랫폼에 따라 정답이 될 것입니다 (내가 생각하는 것에 대해 질문하는 경우). –

+0

죄송합니다. 언어를 추가하는 걸 잊었습니다. 자바. – DragonBorn

+0

정말 모호한 질문입니다. 플랫폼과 언어를 모르면 대답하기가 어렵습니다. 대부분의 경우 메모리의 작은 차이는 더 빠른 CPU 작업으로 상쇄됩니다. –

답변

2

int은 32 비트이고 long은 64 비트입니다. long은 두 배의 메모리를 필요로합니다 (대부분의 응용 프로그램에서는 꽤 중요하지 않습니다).

+3

MS C/C++ 컴파일러에서는 long과 int가 같은 크기입니다. – Michael

+2

이것은 언어 컴파일러 및 플랫폼에 따라 다릅니다. 자바와 C# 모두 32와 64가 될 것입니다. –

+3

이 답변은 Java에 적합합니다. – mob

2

Java에서 64 비트이고 int는 32 비트이므로 longs는 더 많은 메모리 (4 바이트 대신 8 바이트)를 사용합니다.

7

예를 들어, long은 8 바이트이고 정수는 4 바이트입니다. This Java tutorial goes over the primitive data types. 할당 수에 특정 금액을 곱하면 (예 : 이러한 변수를 500 만 개 할당하면) 그 차이는 무시할 수 없을 정도로 커집니다. 그러나 평균 사용량만큼 중요하지 않습니다. 모국어에

, 성능 고려 사항이있다. (이미 자바, 어쨌든 여기 저기 모든 메모리의 종류를 사용하는)

; 32 비트 값은 64 비트 값이 아닌 32 비트 구조의 단일 레지스터에 유지 될 수 있습니다. 64 비트 아키텍처에서는 분명히 가능합니다. 어떤 종류의 최적화 자바가 원래의 정수에서하는지 모르겠지만, 런타임에서도 마찬가지 일 수 있습니다. 걱정할 정렬 문제가 있습니다. 단락과 바이트를 사용하면 더 많은 것을 볼 수 있습니다.

최상의 방법은 필요한 유형을 사용하는 것입니다. 값이 2^31 이상이되지 않으면 long을 사용하지 마십시오.

+1

나는 속도가 Java에 똑같이 적용된다는 확신을 모국어로한다. – rmeador

+0

나는 또한이다. 확실하지 않습니다. –

3

위의 질문에서 Java의 범위에서이 질문을한다고 가정하면 int 데이터 유형은 4 바이트이고 long 데이터 유형은 8 바이트입니다.

그러나 크기 차이가 실제로 메모리 사용량의 차이를 의미하는지 여부는 상황에 따라 다릅니다.

로컬 변수 인 경우 스택에 할당됩니다. 스택이 이미 할당되었으므로 더 많은 스택 공간을 사용하면 더 많은 메모리가 사용되지 않습니다. 물론 스택을 다 소모하지 않는다면 제공됩니다.

클래스의 멤버 인 경우 멤버 정렬 방법에 따라 다릅니다. 때로는 멤버가 메모리에 빽빽하게 쌓이지 않지만 일부 멤버는 짝수 주소에서 시작하도록 패딩이 사용됩니다. 예를 들어, 클래스에 바이트와 int가있는 경우, 그 사이에 3 바이트의 패딩이있을 수 있으므로 int가 4로 나눌 수있는 다음 주소에서 시작합니다.

1

ifwdev가 올바르게 추측됩니다. Java는 int을 32 비트 부호있는 정수로 정의하고 long을 64 비트 부호있는 정수로 정의합니다. 변수를 long으로 선언하면 예 : int으로 선언 된 동일한 변수의 메모리가 두 배가됩니다. 일반적으로 과 같은 작은 유형에 포함될 수있는 값의 경우에도 int은 일반적으로 "기본"숫자 유형입니다. 2^31-1보다 큰 값을 요구하는 특별한 이유가있는 경우가 아니면 int을 사용하십시오.

0

데이터가 특정 데이터 형식 (C로 표현하면 short int)에 적합하다는 것을 알고 있다면 더 큰 데이터를 사용하는 유일한 이유는 성능입니다. 그리고 그것이 목표라면 성능 향상이 얼마나 중요한지에 관계없이 일반적으로 아키텍처의 크기와 일치하는 크기를 사용하려고합니다 (일반적인 32 비트 대상 시스템의 경우 32 비트 시스템을 사용하는 것이 좋습니다. 비트 유형).

하나 이상의 시스템을 대상으로하는 경우 가장 자주 사용되는 것과 일치하는 데이터 형식을 사용할 수 있습니다.

1

... 저에게 더 많은 메모리가 필요합니까?

당신은 더 많은 메모리를 사용하거나하지 않는 경우에 대해 걱정하기 전에 메모리

으로 두 번 사용됩니다, 당신은 프로필한다.

사용하여 램의 1메가바이트 여분을 사용하여 긴보다는 당신이 선언해야합니다 int로 : 262,144 긴 변수 (또는 프로그램에 간접적으로 사용).

그래서 int를 사용해야하는 경우 몇 가지 이유로 하나 또는 두 개의 변수를 선언하면 4 또는 8 바이트 더 많은 메모리가 사용됩니다. int 데이터 유형 : 걱정 너무 많이하지 (내 말은, 앱에있을 수 있습니다 최악의 메모리 문제) 여기 Java Tutorial에서 촬영

은 INT의 정의와 긴

INT입니다 32 비트 부호있는 2의 보수 정수입니다. 최소값은 -2,147,483,648이고 최대 값은 2,147,483,647입니다 (포함). 정수 값의 경우, 다른 데이터를 선택하는 이유 (위와 같음)가 없으면이 데이터 유형이 일반적으로 기본 선택입니다. 이 데이터 유형은 프로그램에서 사용할 숫자에 대해 충분히 큰 데이터 유형이지만, 더 넓은 범위의 값이 필요한 경우에는 대신 long을 사용하십시오. 긴

: 긴 데이터 유형이 64 비트 2의 보수 부호있는 정수입니다. 최소값은 -9,223,372,036854775808이며 최대 값은 9,223,372,036854775807입니다 (포함). int가 제공하는 것보다 더 넓은 범위의 값이 필요할 때이 데이터 유형을 사용하십시오.

하지만 기억 : 도널드 크 누스에 따라 "Premature optimization is the root of all evil"을 (나/붙여 넣기하지만 모든 악의 뿌리입니다 복사에 따라) 어떤 언어에서 어떤 플랫폼에서

관련 문제