정성훈
    동적 메모리 할당에 대해서 궁금한게 있습니다.



 

첫째 - 동적으로 메모리한 프로그램과, 정적으로 메모리를 할당한 프로그램이 실행 속도에 차이가 있는지 궁금합니다.
     요즘 컴퓨터가 좋아서 실제로는 속도 차이가 안나겠지만, 차이가 있을것 같습니다.
     책을 찾아봐도 찾을수 없어서 질문 드립니다.

좋은 질문입니다만, 매우 답변하기 어렵고 또한 설명해도 학생이 이해하기 힘든 질문입니다.

 

속도 차이가 명시적으로 없겠지만 실질적으로는 있을 수도 있습니다.

그러나 실질적으로 있는 경우에도 동적이냐 정적이냐의 차이라기 보다 메모리 액세스 방식의 차이에서 나타날 수 있습니다.

 

정적 메모리 할당은 프로그램에 메모리가 할당되는 것입니다.

(물론 함수내에서 선언된 경우에는 프로그램이 아니라 스택에 할당됩니다만...)

 

그러므로 code 와 상대적으로 가까이에 있게 됩니다. 이 경우 동일 data segment 내에서의 액세스라면

DS + SI 나 DS + DI 형태의 액세스로 DS 변화없이 액세스 할 가능성이 커집니다.

 

그러나, 동적메모리 할당은 heap 영역에서 메모리를 할당 받게 되므로 heap 영역이 프로그램 영역에서 멀리 있다면

다른 data segment 에 존재해 data segment 를 바꾸어 액세스하게 되고 그러면 아주 약간의 속도가 느려지겠지요.

(물론 거의 나노 나 마이크로 초 수준이겠지만)

 

결론은 정적이냐 동적이냐의 차이가 아니라 데이터의 저장 위치에 따라서 아주아주 약간 차이가 날 수도 있고

안 날수도 있다는 것입니다.

 

두번째 - 포인터가 가르키는 값의 크기를 아는 방법은 없나요?
                int *p;
    p = (int*) malloc(20*(int));
     이렇게 하면 int값이 4 이기 때문에 지금 80byte의 공간을 확보 한것이라고 생각이 됩니다.
               printf("%d", sizeof(___???___));
     ???에 이것 저것 넣어 봤지만 계속 '4'라는 값만 나옵니다.
     어떻게 해야 p가 가르키는 곳의 공간의 크기를 알수 있을까요?

 

sizeof 연산자는 compile-time operator 입니다.

즉, C 언어를 실행파일 exe 로 만들 때 이 연산자가 동작되는 것입니다.

 

그러므로,

 int  num[10];

printf("%d\n",sizeof (num));

 

위처럼 하면 compile-time 에 num 의 크기가 int 4 bytes 이고 10개 이므로 40이라고 정확하게 크기를 출력합니다.

 

그러나,

 

int *num;

num = (int *) malloc(sizeof(int) * 10);

printf("%d\n",sizeof (num));

하면 num 의 크기가 run-time 시에 결정되기에 알 수가 없는 것입니다.

결국 아래에서는 num 의 저장크기인 4만 출력됩니다. (컴퓨터에 따라서 4나 2가 출력됨)

 

결국 malloc 을 사용하는 프로그램에서는 malloc 의 인자로 size 를 넣어주기에 해당 size 를 이용하여

크기를 사용해야 합니다.

 

나도 malloc 으로 할당된 메모리 영역의 크기를 다른 방법으로 알 수 있는 방법이 없는 것으로 압니다.

그러나, 나도 100% 확신할 수는 없으니, 혹시 그런 방법을 알게된다면 나에게도 알려주기 바랍니다.

 

 

 

 

  등록일 : 2007-04-25 [00:57] 조회 : 5071 다운 : 0   
 
△ 이전글동적 메모리 할당에 대해서 궁금한게 있습니다.
▽ 다음글함수원형에 대한 사소한 질문있습니다..
자료구조
번호 제 목 이름 조회 등록일
자료구조 자바 applet 구동 방법
기말과제 제안발표 내용
기말과제 최종발표 내용
기말과제 최종보고서 내용
16 자료구조 과제에 대해 질문 있습니다. 질문 김경보 3210 04-06
15 └❶ 자료구조 과제에 대해 질문 있습니다. 답변 정성훈 3127 04-12
14 자료구조 과제 질문요 질문 허효원 3194 04-03
13 └❶ 자료구조 과제 질문요 답변 정성훈 2871 04-03
11 동적 메모리 할당에 대해서 궁금한게 있습니다. 질문 이새종 3081 04-24
10 └❶ 동적 메모리 할당에 대해서 궁금한게 있습니다. 답변 정성훈 5071 04-25
9 함수원형에 대한 사소한 질문있습니다.. 질문 김지훈 2828 03-21
8 └❶ 함수원형에 대한 사소한 질문있습니다.. 답변 정성훈 2600 03-21
7 교수님 질문있습니다. 질문 정성훈 2776 03-19
6 └❶ 교수님 질문있습니다. 답변 정성훈 2629 03-19
5 저번시간에 배운내용을 해보았는데 질문 이정훈 2613 03-13
4 └❶ 저번시간에 배운내용을 해보았는데 답변 정성훈 2648 03-13
3 자료구조 자바 applet 구동 방법 공지 정성훈 4583 03-05
2 질문있습니다. 질문 정필진 4026 03-27

[1][2][3][4]