반응형
Arrays
Array Allocation
Array Access
char *p;
p++; // 실제로 p = p + 1;
int *ip;
ip++; // c언어에서는 +1이지만 실제로 ip = ip + 4;
*(ip + 2) // 아래와 같다
ip[2]
ip + x // notation
ip + 4x // computation
- &는 주소값을 반환
- *( 포인터 주소 )는 해당 주소에 저장된 값을 반환
Q. *(ip + negative_value) 가능한가?
A. 컴파일러는 아무 상관없이 작동할 것이다. 다만 undefined value가 찾아질 뿐..
Q. *(2 + ip) 라면 어떻게 되는가?
A. 불가능할 것이다 ㅎㅎ *(ip + 2)가 가능했던 것은 컴파일러가 포인터라는 것을 알고 +2를 scale해서 연산하기 때문이다
Array Accessing Example
- 컴파일러는 scaling을 위해 %rsi에 저장된 수에 4를 곱하고 이를 %rdi와 더해준다
Array Loop Example
- 마찬가지로 z[i] 접근 시에 스케일링을 해서 접근한다
Multidimensional (Nested) Arrays
Understanding Pointers & Arrays
- int (*A3) [3] : A3는 포인터이고, 가리키는 곳은 3개의 크기를 가진 배열이고, 해당 배열은 int로 구성된다.
- int (*A4[3]) : A4는 3개의 크기를 가진 배열이고, 해당 배열은 포인터이며, 그 포인터는 int를 가리킨다.
- int *A2[3]와 int (*A4[3])는 같다.
Q. size을 알 수 있나?
A. 컴파일러는 다 알고 있다.
Nested Array Example
Nested Array Row Access
Nested Array Element Access
Multi-Level Array Example
Element Access in Multi-Level Array
Array Element Access
- nested array : 한번에 2차원 배열 선언
- multi-level array : 1차원 배열을 선언해두고 해당 배열들을 포인터 배열에 삽입
N X N Matrix Code
16 X 16 Matrix Access
- 배열의 크기가 고정적이라면 비용이 싼 shift 연산을 사용한다
n X n Matrix Access
- 컴파일 시점에 배열 크기 n을 알 수 없다면 비용이 비싼 multiplication을 사용해야 한다
Structures
Structure Representation
Generating Pointer to Structure Member
Following Linked List
Structures & Alignment
Alignment Principles
- 64 bit machine에서는 한번에 64bit 씩 가져오는데, unaligned data에서 오히려 이어져야하는 데이터가 끊어져있다면 더 비효율적이기 때문에 오히려 aligned data 를 사용하는게 효율적이다.
Specific Cases of Alignment (x86-64)
Satisfying Alignment with Structures
Meeting Overall Alignment Requirement
Arrays of Structures
Accessing Array Elements
- 메모리 낭비가 심한 구조이다
Saving Space
Floating Point
FP Basics
FP Memory Referencing
Other Aspects of FP Code
반응형
'Computer Science Lectures > Introduction to Computer Systems - CMU' 카테고리의 다른 글
Lecture 09: Machine-Level Programming 5: Advanced Topics (0) | 2022.11.03 |
---|---|
Lecture 07: Machine-Level Programming 3: Procedures (0) | 2022.10.25 |
Lecture 06: Machine-Level Programming 2: Control (0) | 2022.10.24 |
Lecture 05: Machine-Level Programming 1: Basics (0) | 2022.10.19 |
Lecture 04: Floating Point (0) | 2022.10.18 |