sliver__

2.14 Arrray versus Pointers 본문

CS/컴퓨터 구조

2.14 Arrray versus Pointers

sliver__ 2023. 10. 22. 21:01
728x90

Array Version of Clear

clear1(int array[], int size) 
{
    int i;
    for (i = 0; i < size; i += 1) 
    array[i] = 0;
}
clear2(int *array, int size) 
{
    int *p;
    for (p = &array[0]; p < &array[size]; p = p + 1) 
    *p = 0;
}

를 assembly code로 바꾸면?

# array : $a0, size : $a1, i : $t0

move $t0, $zero
loop1 : 
	sll $t1, $t0, 2
    add $t2, $a0, $t1
    sw  $zero, 0($t2)
    addi $t0, $t0, 1
    slt  $t3, $t0, $a1
    bne  $t3, $zero, loop1

 

Pointer Version of Clear

move $t0, $a0
loop2:
	sw $zero, 0($t0)
    addi $t0, $t0, 4
    sll $t1, $a1, 2
    add $t2, $a0, $t1
    slt $t3, $t0, $t2
    bne $t3, $zero, loop2

$t1은 $a0의 array size의 마지막 주소 값을 의미하는데 loop2 내부에서 계속 계산 => 밖으로 빼줌

move $t0, $a0
sll $t1, $a1, 2
add $t2, $a0, $t1
loop2:
	sw $zero, 0($t0)
    addi $t0, $t0, 4
    slt $t3, $t0, $t2
    bne $t3, $zero, loop2

 

Comparing the Two Versions of Clear

 

위 두가지 방법을 비교해보면 pointer를 쓰는것이 loop 단계도 적을 뿐더러 array를 사용하는 경우 index 접근을 위한 곱하기 계산도 없기 때문에 효율적이다.

728x90
Comments