본문 바로가기

Programming/C language

Chapter 11. 메모리와 포인터 (내용 요약 - 1)

Memory 


변수 -> 'memory'의 특정 공간 

즉, 식별번호가 필요하다. => memory의 주소 


구성요소

이름이 부여된 memory

그 안에 담긴 정보 

memory의 주소



memory의 특징



   지정 - 직접 : 변수 선언 (memory 확보 - 위치 정보를 알 수 없음 (자동화) -)

 

간접 : 포인터 (memory 주소를 저장) 



Byte order 


300  ->  0x0000012c(16)    - Big endian

0x2c010000(16)    - little endian ( Intel x86 )



Memory 종류


Stack - 자동 / 지역 변수


Heap - 동적 할당 


PE file - Text Segment - Machine Code 


Data Segment - Read only - 상수 형태의 문자열 

  - Read / Write - 정적, 전역 변수  



ASLR - Address Space Layout Randomization 


실행마다 memory 주소를 변경하는 것 

메모리 해킹을 막기 위해서 도입



Pointer

Pointer 변수 - Memory의 주소를 저장하기 위한 변수 


주소 연산자(&) - Memory의 실제 주소를 알려주는 연산자 (변수를 주소로)


간접 지정 연산자(*) - 변수의 내용을 memory의 주소로 계산하게 하는 연산자 (주소를 변수로) 





Pointer & Array 


배열 이름 : 배열의 기준 요소(가장 앞 요소)의 기준 주소

- 주소이므로 Pointer 변수에 저장할 수 있다. 



paData + 1 은 paData안에 들어있는 aList의 주소값에 1을 더하는게 아니라 aList[1]의 주소를 나타낸다. 

즉, aList의 2번째 요소의 기준 주소를 나타내는 것이다. 



주소계산


기준을 정하고, offset을 이용해 '상대적'으로 계산한다.


- 기준요소는 기준을 중심으로 '0'만큼 떨어져 있다.

- Zerobased index 라고 한다.


Pointer는 어떤 기준을 잡기 위해 사용한다.   




- 출처 : 독하게 시작하는 C 프로그래밍 (최호성, 루비 페이퍼)