Computer Science Lectures/Introduction to Computer Systems - CMU

Lecture 08: Machine-Level Programming 4: Data

오렌지색 귤 2022. 10. 31. 23:28
반응형

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

반응형