inflearn logo
강의

Course

Instructor

Open Source Data Structures and Algorithms in C

Linked List Tail Node Intro

tail노드의 이유 & 메모리 풀링 관련

325

Sss

2 asked

0

메모리 풀링은 그렇다면 주로 어느정도의 사이즈를 가정할 수 있을때나 시스템상 핸들링 할 수 있는 최대치를 넣어 구현한다는 말씀이신가요?그렇다면 내부적으로 너무 많은 메모리를 사용하지않고 낭비되어 효율성이 떨어지지 않나요? 어느 시점에 써야 하는지에 대한 부분이 좀 명확하지않아, 어떤 상황에 써야 되는 기법인지 묻고 싶습니다. 2번째는 현 tail 노드를 추가하는 부분에 있어서 .... 왜 마지막 노드의 next가 NULL인것에서 문제가 생기는 지 이해가 잘 되지 않습니다.for문이나 while문으로 loop하여 display하는것으로 가정했을때 마지막 노드 next가 0이게 되면 더이상 반복문이 실행되지않고 끝나게 되면서, NULL이 프린트 되지않고 나오지않나요?예시로 for문 중간에 왜 아무것도 기입하지 않는 부분도 어떻게 컴파일은 진행이되고 세크먼트로폴트 결과가 나오는걸까요? 혹시 선생님 말씀은 null로 마지막 node가 설정되지 않은 쓰레기값이 설정되었을때를 방지하기위해 tail노드를 추가적으로 안전하게 설치하자는 말씀이실까요?

c linux 알고리즘 gcc data-structure

Answer 2

0

jikim1770

질문 내용에 항목 별로 답변 드리겠습니다.

메모리 풀링은 그렇다면 주로 어느정도의 사이즈를 가정할 수 있을때나 시스템상 핸들링

할 수 있는 최대치를 넣어 구현한다는 말씀이신가요?

그렇다면 내부적으로 너무 많은 메모리를 사용하지않고 낭비되어 효율성이 떨어지지 않나요?

어느 시점에 써야 하는지에 대한 부분이 좀 명확하지않아, 어떤 상황에 써야 되는 기법인지 묻고 싶습니다.

답변 : 대부분 시스템에서는 메모리 풀링의 최대치를 관리 하고 있습니다.

 

예를 들어 운영체제의 프로세스의 최대수 1024, 한 프로세스에서 오픈 가능한 파일수 1024

등 너무 메모리를 낭비 하지 않는 선에서 시스템에 필요한 최대수를 메모리 풀링 하면 됩니다.

2번째는 현 tail 노드를 추가하는 부분에 있어서 .... 왜 마지막 노드의 next가

NULL인것에서 문제가 생기는 지 이해가 잘 되지 않습니다.

for문이나 while문으로 loop하여 display하는것으로 가정했을때 마지막 노드

next가 0이게 되면 더이상 반복문이 실행되지않고 끝나게 되면서,

NULL이 프린트 되지않고 나오지않나요?

답변 : 포인터 변수 temp에 NULL이 들어온 경우 그대로 역참조 하게 되면

프로세스가 런타임 상에서 죽게 됩니다. NULL은 0번지를 의미하고 0번지를

접근하면 운영체제가 해당 프로세스를 죽게 만듭니다.

예) temp->data ==> (*temp).data => (*0).data 0 번지를 참조함

 

예시로 for문 중간에 왜 아무것도 기입하지 않는 부분도 어떻게 컴파일은 진행이되고

세크먼트로폴트 결과가 나오는걸까요?

답변 : for문 중간은 조건문 이므로 조건이 필요하지 않은 경우 생략할 수 있습니다.

컴파일러는 이를 에러 처리 하지 않습니다.

하지만 for문의 조건을 통과하게되면 위에 답변 처럼 temp가 NULL 인 경우

temp->data 문법에서 세크먼트 폴트 예외가 발생 하여 죽게 됩니다.

 

혹시 선생님 말씀은 null로 마지막 node가 설정되지 않은 쓰레기값이 설정되었을때를

방지하기위해 tail노드를 추가적으로 안전하게 설치하자는 말씀이실까요?

답변 : tail을 사용하여 종료 조건을 판단 하면 NULL을 만나지 않게 되어

프로세스가 죽는 문제를 해결할 수 있습니다. tail의 next는 NULL로 되어

있지 않고 자신을 가리키기 때문 입니다.

0

Sss

for문 중간의 기입하지 않는 부분에 대해서는 null참조의 위험성때매 그렇다는것은 알게되었습니다.

재귀 관련

0

9

1

다음 강의는 언제 올려주시는지요?

0

11

0

replit에서 developer frameworks가 안보여요

0

17

2

20년 4,5회 13번

0

18

1

연결리스트 삽입삭제 O(1) 아닌가요?

0

18

2

코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의

0

20

1

태어난김에 세계일주 시간 초과

0

22

1

커리큘럼 중 정렬 관련 질문

0

20

1

코테 사이트 로그인 불가

0

27

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

29

3

백준 사이트 서버종료

1

26

0

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

26

1

수강평 이벤트

0

34

2

안녕하세요. 계속 프로젝트를 해야지 하다가 결제하고 환경 설정 중입니다.

0

22

1

Export template 안됨

1

45

2

part8 Notion 링크

0

30

1

scanf("%d\n") 의미

0

28

1

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

49

2

26년 1회 실기 해설 강의

0

66

2

잠겨버린 사물함 시간초과 관련 질문입니다.

0

30

1

vi 명령어

0

46

1

Insert_data에서 prev_tmp를 지웠을 때, 성능향을 기대할 수 있을까요?

0

205

1

커널 버전

0

251

1

메모리 풀링 속도 확인

0

329

1