일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Javascript
- 소수
- 백준
- 수학
- align-items
- Gap
- Design Pattern
- c
- 미디어 쿼리
- SK바이오사이언스
- pandas
- Flexbox
- skt membership
- grid
- dataframe
- stl
- 확률
- Prefix Sums
- 통신사할인
- spring
- 강화학습
- Photoshop
- margin
- 알고리즘
- 에라토스테네스의 체
- CSS
- c++
- Codility
- 상태
- 포토샵
Archives
- Today
- Total
sliver__
2.14 Arrray versus Pointers 본문
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
'CS > 컴퓨터 구조' 카테고리의 다른 글
2.17 Real Stuff : x86 Instruction (1) | 2023.10.31 |
---|---|
2.16 Real Stuff: ARMv7 (32-bit) Instructions (0) | 2023.10.23 |
2.13 A C Sort Exampleto Put It All Together (0) | 2023.10.21 |
2.12 Translating and Starting a Program (0) | 2023.10.21 |
2.11 Parallelism and Instructions : Synchronization (0) | 2023.10.21 |
Comments