inflearn logo
강의

Course

Instructor

Open Source Data Structures and Algorithms in C

Linked List Memory Dependency Removal

메모리 풀링 속도 확인

339

Hyeongtak Ji

1 asked

0

안녕하세요,

 

malloc() 대신 스택 변수로 NODE 배열을 만들어서 사용하는 것을 보았는데요,

정말로 빠른지 확인해보고 싶은데 어떻게 할 수 있을까요?

c linux 알고리즘 gcc data-structure

Answer 1

0

jikim1770

안녕하세요.

 

삽입/삭제가 계속 반복 되도록 루프를 많이 돌려서 걸리는 시간을 측정 하여 비교하면 될 것 같습니다.

0

Hyeongtak Ji

답변 감사합니다.

삽입/삭제가 계속 반복 되도록 루프를 많이 돌려서 걸리는 시간을 측정 하여 비교하면 될 것 같습니다.

  1. 삽입만 하는 것은 시간 차이가 생기지 않나요?

  2. 반복 수를 아래처럼 증가해 list_3.c와 list_4.c를 비교해보려고 했습니다.

    diff --git a/1.generic_list/list_3.c b/1.generic_list/list_3.c
    index f6144b67aa8a..a0046a6d4544 100644
    --- a/1.generic_list/list_3.c
    +++ b/1.generic_list/list_3.c
    @@ -1,5 +1,6 @@
     #include <stdio.h>
     #include <stdlib.h>
    +#define SIZE 10000000
     typedef struct _node
     {
            int data;
    @@ -31,10 +32,8 @@ int main()
     {
            NODE head = {0,};
            int i;
    -       display(&head);
    -       for(i=0; i<7; i++ )
    +       for(i=0; i<SIZE; i++ )
            {
    -               display(&head);
                    insert_data( i+1 , &head );
            }
            return 0;
    diff --git a/1.generic_list/list_4.c b/1.generic_list/list_4.c
    index c4703cfec598..cc4d8a20bcdc 100644
    --- a/1.generic_list/list_4.c
    +++ b/1.generic_list/list_4.c
    @@ -1,5 +1,6 @@
     #include <stdio.h>
     #include <stdlib.h>
    +#define SIZE 10000000
     typedef struct _node
     {
            int data;
    @@ -27,13 +28,11 @@ void display(NODE *head)
     int main()
     {
            NODE head = {0,};
    -       NODE temps[7];
    +       NODE temps[SIZE];
            int i;
    -       display(&head);
    -       for(i=0; i<7; i++ )
    +       for(i=0; i<SIZE; i++ )
            {
                    temps[i].data = i+1;
    -               display(&head);
                    insert_data( temps+i , &head );
            }
            return 0;

    저 정도 SIZE를 쓰면 list_3.c 의 경우는 이제 time으로 시간 측정이 되는데 (0이 아닌 시간), list_4.c는 실행 시 아래처럼 에러가 발생합니다.

    gcc -o list_3 list_3.c
    gcc -o list_4 list_4.c
    time ./list_3
    real    0.22s
    user    0.12s
    sys     0.10s
    time ./list_4
    [2]    268619 segmentation fault (core dumped)  ./list_4
    real    0.07s
    user    0.00s
    sys     0.00s

    어떻게 하면 제대로 시간 측정을 할 수 있을까요?

1

jikim1770

안녕하세요.

해당 프로그램이 죽는 이유는 스택의 크기 제한에 있는 것 같습니다.

여기서는 메모리 위치 보다는 메모리 풀링이 중요한 개념 이므로 메모리 할당 시점을 아래와 같이 변경하여 테스트 해보시면 삽입 속도의 차이를 알 수 있습니다.

 

list_3.c

image

list_4.c

image

내부의 시간을 측정하는 소스가 있고 단위는 초입니다.

그리고 SIZE는 1000000000 으로 충분한 시간을 측정 하였습니다.

시간이 2배정도 차이나는 것을 확인할 수 있습니다.

리눅스로 진행해도 될까요?

0

10

2

민구님 설치시 또 막혀서 질문드려요

0

28

2

git clone 명령어를 어디 터미널에다 붙여넣어야 하나요?

0

32

2

html 파일을 못 불러 옵니다.

0

31

2

강의노트 접속 불가

0

26

2

26년 1회차 기출 강의

0

50

2

기출문제

0

55

1

정보처리기사 실기 zip

0

44

2

데이터베이스 노션

0

37

2

수업노선자료파일 다운

0

34

2

C언어에서

0

58

1

포인터 질문

0

56

2

sizeof는 컴파일 타임 연산자라서 CPU를 사용치 않는다

0

30

2

실기 공부 시작 하려고 하는데요

0

93

2

결재했는데도 강좌가 안보입니다.

0

49

1

노션 링크 문의

0

60

2

문제 풀이 접속 오류

0

55

2

coders 사이트 로그인이 안돼요

0

47

2

노션 접근권

0

47

1

재귀 관련

0

48

1

vi 명령어

0

52

1

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

0

212

1

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

0

345

2

커널 버전

0

267

1