2017-09-15 5 views
0

일부 조각은 짧은 대답은 NO입니다힙 할당 주소와 정적 변수 일치 값을 처리 할 수 ​​있습니까? 내가 가지고있는 코드의

static const int s_kVar1 = 0; 
static const int s_kVar2 = 1; 

... 

void foo() 
{ 
    MyObject *o = new MyObject(); 
    // Is it ever possible that (o == &s_kVar1) or (o == &s_kVar2) 
} 
+3

질문에 'o == & s_kVar1'을 (를) 묻는 것 같지만 코드는'& o == & s_kVar1'을 (를) 묻습니다. – chris

+0

힙에 포인터가 필요하기 때문에 'o'에 대한 구문이 유효하지 않습니다. –

+0

당신이 이것을 믿게하거나 순수하게 가설적으로 여겨지는 것을 만나셨습니까? – molbdnilo

답변

1

이하입니다. 다른 객체는 다른 주소를 가지게됩니다. 전역 (s_kVar) 및 동적으로 할당 된 객체 (o)는 서로 다른 메모리 영역에 저장됩니다.

P. 하지만 그렇습니다. 언어를 남용하여 보증을 위반할 수 있습니다. 동일한 메모리 위치에 두 개의 다른 오브젝트를 생성 할 수 있습니다.

+0

노동 조합이 존재할 때 실제로 남용하는 것은 아닙니다. –

+0

@MadPhysicist 조합의 한 구성원 만 한 번에 활성화 될 수 있습니다. – Quentin

+0

@Quentin. 똑같은 이유로 주어진 시간에 한 객체 만이 주어진 메모리 위치를 정말로 망칠 수 있습니다. 그건 내 upvote 영향을주지 않습니다. –

0

아니요. 정적 변수는 초기화되었거나 초기화되지 않았는지 (0으로 초기화 됨)에 따라 .BSS 또는 .DATA 세그먼트에 저장됩니다. 귀하의 경우에는

static const int s_kVar1 = 0; .BSS 및
static const int s_kVar2 = 1; .DATA

힙은 동적 할당 용입니다.

현재 나는 파일 범위에서 정적 const를 사용하는 이유를 알지 못합니다. const는 기본적으로 내부 연결을 만들고 전역 변수는 정적 수명을 갖습니다. 물론 C가 유용하다는 것을 볼 수있는 곳에서는 C를 사용하지 않는 한.