2010-06-05 5 views
0
class A 
{ 
public int a; 
public int c; 
} 

나는 A에서 10 개의 인스턴스를 생성합니다. 그런 다음 A에서 15 개의 인스턴스를 다시 생성합니다 ... 계속하십시오. 처음 10 인스턴스는 변수에 대해 동일한 값을 가지며 다음 15 인스턴스는 다시 동일한 값을가집니다. 그러나 두 그룹 모두에 대해 동일한 값을 가짐을 의미하지는 않습니다. 문제는 첫 번째 그룹에서 동일한 값을 10 회 생성하고 15 두 번째 그룹의 시간은 메모리에 필요하지 않습니다.클래스 멤버 변수에서 불필요한 같은 값을 줄입니다.

이 상황에서 불필요한 데이터를 줄이기위한 최상의 솔루션 또는 솔루션은 무엇입니까?

+0

어떤 언어입니까? – crazyscot

+0

나는 그것이 언어에 관한 질문과 관련이 있다는 것을 모른다. 정말로 관련이있다면 C# 또는 java가 될 수있다. – Freshblood

+0

네, 언어와 조금 관련이 있습니다. C에서 우리는 포인터를 사용할 수 있습니다. 우리는 포인터를 사용할 수 있습니다.하지만 안전하지 않은 코드를 쓰는 것은 나를 끌어 들이지 않습니다. – Freshblood

답변

0

ac이 실제로는 정수인 경우 메모리 공간 밖으로 최적화하려고하지 않아도됩니다. 대부분의 경우 그렇게하기 위해 사용하는 것은 정수 자체보다 더 많은 공간을 차지합니다.

그러나 실제로 많은 양의 메모리를 차지하는 객체가 ac 인 경우 개체 대신 객체 포인터 (또는 언어에 따라 홀더)를 A의 멤버로 사용할 수 있습니다. 그런 식으로 포인터에서 중복되는 유일한 메모리입니다.

+0

개체 포인터는 참조 유형 변수를 의미합니까? 그렇다면 나는 아래 비슷한 대답을했다. 그러나 나는 얼마나 많은 공간이 재계약 회원을 차지할지는 모른다. – Freshblood

+0

기존 개체에 대한 참조는 포인터가 아닌 포인터이며 소량의 메모리를 차지합니다. – VeeArr

0

정적 멤버가이 문제에 대해 작동하지 않는 것은 확실합니다. 인스턴스 그룹은 다른 값을 갖기 때문에 분명합니다.

이것은 해결책 중 하나 일 수 있습니다. 다른 사람은 무엇을 할 수 있습니까?

class Common 
{ 
    public int a; 
} 
class A 
{ 
    public Common a; 
    public int c; 
} 
0

HashSet<T>이 도움이 될까요?

+1

나는 그렇게 생각하지 않는다. – Freshblood

0

또 다른 해결책은

class A 
{ 
    public int? a; 
    public int c; 
} 

대신의 INT의 새 인스턴스를 만들인가? 우리는 같은 인스턴스를 할당해야합니다.하지만 int를 주조합니까? int를 사용하면 성능 문제가 발생할 수 있습니다.

관련 문제