๐ ์์ธ ์ ๋ฆฌ#
- ํจ์์ ๋ค์ ๋ถ๋ถ์ ์ต์ ํ ํด๋ณด์.
7 for (i = 0; i < vec_length(v); i++) {
8 data_t val;
9 get_vec_element(v, i, &val);
10 *dest = *dest OP val;
11 }- vec_length(v)๋ฅผ ๋งค ๋ฐ๋ณต๋ง๋ค ํธ์ถํด์ ๋น๊ตํ๊ฒ๋๋ค.
- ์ด๋ฅผ ์์์ ๋ณ์๋ก ์ ์ฅํ๊ณ , ๊ทธ ๋ณ์๋๋ง ๋น๊ตํ๋ฉด ํด๋น ํจ์๋ก ์ธํ ๋ฐ๋ณต๋๋ ๊ณ์ฐ์ ์ค์ผ ์ ์๋ค.
- ์ด ์ต์ ํ๋ฅผ code motion ์ด๋ผ๊ณ ํ๋ค.
- ์ต์ ํ ์ปดํ์ผ๋ฌ๋ ์ด code motion์ ์ํํ๋ ค๊ณ ์๋ํ์ง๋ง, ์์์ ๋ฐฐ์ด๊ฒ๊ณผ ๊ฐ์ด ์ด๋ค ์์ธ์ฌํญ์ด ๋ฐ์ํ ์ง ๋ชจ๋ฅด๊ธฐ๋๋ฌธ์ ๊ฝค๋ ์ ์คํ๋ค.
- ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช ์์ ์ผ๋ก ์ํํ๋๊ฒ ์ข์ ์๋ ์๋ค.
- ๊ทน๋จ์ ์ธ ์์๋ก, ๋ค์์ ๋ณด์.
1 /* Convert string to lowercase: slow */
2 void lower1(char *s)
3 {
4 long i;
5
6 for (i = 0; i < strlen(s); i++)
7 if (s[i] >= `A' && s[i] <= `Z')
8 s[i] -= (`A' - `a');
9 }
10
11 /* Convert string to lowercase: faster */
12 void lower2(char *s)
13 {
14 long i;
15 long len = strlen(s);
16
17 for (i = 0; i < len; i++)
18 if (s[i] >= `A' && s[i] <= `Z')
19 s[i] -= (`A' - `a');
20 }
21
22 /* Sample implementation of library function strlen */
23 /* Compute length of string */
24 size_t strlen(const char *s)
25 {
26 long length = 0;
27 while (*s != `\0') {
28 s++;
29 length++;
30 }
31 return length;
32 }- strlenํจ์์ ์๊ฐ๋ณต์ก๋๊ฐ $O(N)$์ด๋ผ์, $O(N^2)$๊ฐ ๋ ์ ๋๋ก ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
- ํ์ง๋ง ์ด๋ ์ปดํ์ผ๋ฌ๊ฐ ์ธ์ํ๊ธฐ ์ด๋ ค์ด ์ํฉ์ด๊ณ , ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ณํ์ ์ํํด์ฃผ์ด์ผ ํ๋ค.
