블로그

메모리 영역 본문

CS

메모리 영역

왕방토 2022. 12. 22. 09:21
728x90

개빡친다

 

모르는게 너무 많아

 

 

 

https://mintnlatte.tistory.com/247

 

컴파일(Compile)과정 - as에 의한 기계어 코드 생성

■ 컴파일이 끝난 어셈블리 코드는 as에 의해 기계어(바이너리)로 어셈블 된다. (1) 오브젝트 파일 구조 : 오브젝트 파일이나 실행파일은 그 자체로서 링커나 로더에게 정보를 제공해야만 링킹

mintnlatte.tistory.com

 

 

 

https://donghwada.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-Code-Data-BSS-HEAP-Stack-Little-Endian-Stack%EC%9D%98-%EC%9D%B4%ED%95%B4

 

메모리 영역 (Code, Data, BSS, HEAP, Stack), Little Endian, Stack의 이해

- 메모리 영역 (윈도우 기준, 리눅스는 조금 다르다.) 함수, 제어문, 상수 등등 / 함수에 대한 기계어 코드가 들어감 ← Code compile time에 크기가 결정되고 이후로 변동되지 않는다. 전역변수 / 초기

donghwada.tistory.com

 

https://badayak.com/entry/C%EC%96%B8%EC%96%B4-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC%EA%B3%BC-%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC-%ED%8C%8C%EC%9D%BC%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%8A%94

 

C언어 텍스트 파일과 바이너리 파일의 차이는?

바이너리 파일? 텍스트 파일? C/C++ 언어를 학습하다 보면 파일 종류 중에 텍스트 파일과 바이너리 파일 얘기가 나오는데요, 처음 접하시는 분이라면 혼란스러울 수 있습니다. 설명하는 내용이 대

badayak.com

 

 

https://velog.io/@msung99/series/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

 

https://gusdnd852.tistory.com/16

 

C언어 메모리 세그먼트

C를 공부하기 전에 C언어의 메모리 구조를 알면 C언어를 이해하는데 큰 도움이 되며, C이외에도 Java 등의 언어도 이러한 구조와 굉장히 비슷하게 설계되어있다. (아주 약간의 차이만 존재한다) 때

gusdnd852.tistory.com

 

 

 

<DATA영역>
  • .rodata : READ ONLY
    • 초기화 되어있다
    • const 변수
    • 각종 문자열
      • ex) const ptr* = "abced" 라면 "abcde"가 .rodata영역에 있는거임! ptr은 위치한 곳에 따라서 달라짐
  • 0.data : READ WRITE 가능
    • 초기화 된 전역변수
  •  

 

  • .bss : READ WRITE 가능
    • 초기화 되어있지 않은 전역변수
    • ex) int arr[500]; => 컴파일 시에 컴파일러가 0으로 다 채워줌

 

 

전체 메모리 영역을 고정/가변으로 나누기
  • 컴파일 시 크기가 결정됨
    • .txt: 기계어 코드 (read only)
    • .data: 초기값이 있는 전역변수
    • .bss: 초기값이 없는 전역변수
  • 런타임 중에 가변적으로 변동됨 - 힙은 위->아래로, 스택은 아래->위로 순차적으로 채워자가며 메모리를 사용
    • Heap: 동적할당으로 할당된 변수
    • Stack: 블록({}) 내에서 할당된 변수

 

 

 

 

 

 

 

 

int a = 1;
int b = 2;

const int* ptr = &a;
ptr = &b;

==> 가능

int* 를, 즉 a의 값을 const 해준 것이므로 ptr 변수에 b의 주소값을 넣는 것이 가능함

 

int a = 1;
int b = 2;

int* const ptr = &a;
(*ptr) = b;

==> 가능

0.

ptr을, 즉 ptr이 가리키는 주소값을 const 해준 것이므로 ptr의 주소값에 담긴 값을 2로 만들어 주는 것이 가능함

 

 

위의 두 케이스는 네번째 줄이 서로 바뀌면 실행되지 않는다

 

Comments