반응형
snowman95
코딩수련장
snowman95
전체 방문자
오늘
어제
  • 분류 전체보기 (229)
    • 앱테크 (3)
    • 옵시디언 (5)
    • 드라마, 영화 (1)
    • 개발자 이야기 (23)
    • 프로젝트 (10)
      • 프로젝트 방법론 (7)
      • 프로젝트 기록 (2)
      • Github (1)
    • 개발 지식 (0)
      • 디자인 패턴 (0)
    • 프론트엔드 개발 (5)
      • 테크트리 (2)
      • React.js (19)
      • ReactNative (2)
      • Next.js (6)
      • GraphQL (6)
      • 패키지 매니저 (2)
      • 라이브러리 (3)
      • 상태관리 라이브러리 (4)
      • Web 지식 (3)
      • HTML CSS (26)
      • Javascript (16)
      • 도구 (Tool) (3)
      • 성능 최적화 (1)
      • 디자인시스템 (0)
    • Python (53)
      • 모음집 (1)
      • 문법 (12)
      • 라이브러리 (15)
      • 알고리즘 (10)
      • 백준 문제풀이 (9)
      • 코딩테스트 (2)
      • 도구 (Tool) (3)
    • C++ (20)
      • 알고리즘 (6)
      • 삼성SW기출 (6)
      • 삼성 A형 (6)
    • 데이터사이언스 (1)
    • 인프라 (9)
      • 하드웨어 지식 (4)
      • Ansible (2)
      • Database (2)
      • 쉘스크립트 (1)
    • 주식 (0)
    • 취업 준비 (4)
      • 취업 이야기 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 티스토리챌린지
  • 면접
  • 나의 해방일지
  • 전공 요약 #운영체제
  • Next.js #graphql #tailwind.css
  • 전공 요약 #네트워크
  • 알고리즘
  • 전공 요약 #데이터베이스
  • 삼성SDS
  • 삼성SW역량테스트
  • GraphQL
  • 공간복잡도
  • 언어
  • A형
  • 백준
  • 오블완
  • C++
  • 기계식키보드 #nuphy
  • 전공요약
  • nextjs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
snowman95

코딩수련장

파이썬(python) 과 C언어의 변수 저장 방식 차이
Python/문법

파이썬(python) 과 C언어의 변수 저장 방식 차이

2021. 5. 9. 13:29
728x90
반응형

변수 저장 방식 차이


C언어

메모리 공간을 할당 받고 값을 집어 넣어서 사용하는 방식이다.

메모리 공간을 할당받는 방식이 정적/동적으로 나뉜다.

 

정적 메모리 할당

컴파일시 고정된 크기/타입의 메모리 공간 할당받아서 사용가능. (스택 공간)

크기 정해지고 중간에 바꿀 수 없음.

소멸할때 운영체제가 자동으로 메모리 반납

int a = 0;

a라는 변수가 int형 크기만큼 메모리 공간 할당 받아서 그곳에 0을 넣음.
프로그램 종료시 운영체제가 알아서 메모리 반납

동적 메모리 할당 & 포인터

런타임에 원하는 크기/타입의 메모리 공간을 만들고,

그 공간을 가리키는 주소를 포인터 변수에 저장하여 사용해야 함. (힙 공간)

(※ 포인트 변수란 값이 아닌 주소를 가리키는 변수임)

메모리 반납 수동으로 해주어야 함.

 

1. 포인터 생성

2. malloc/memset 함수로 원하는 크기/타입의 메모리 공간 할당받아 포인터 변수에 전달

3. 메모리 반납(free)

char *str = NULL;         : 포인터 변수생성
str = (char*) malloc(20); : 메모리 할당
free(str)                 : 메모리 해제

아래는 참고

● 메모리 할당함수
포인터는 특정 주소만 가리키고.
그 주소부터 시작하는 메모리 할당하여 사용하는 방식임.

1. malloc()
포인터 = (자료형) malloc(바이트 수)
주어진 바이트만큼의 메모리 공간을 만들어 주소반환
그 공간에 원하는 자료형으로 변환하여 사용하는 방식.

2. memset()
memset(포인터, 값, 바이트 수);
포인터가 가리키는 주소부터 바이트 만큼을 값 으로 채움


● 메모리 반납함수
free(포인터)

 

※ 혹시 메모리, 주소라는게 머릿속에 잘 그려지지 않는가?

메모리 공간은 아파트다.

101동, 102동, 103동... 이렇게 연속적인 공간으로 이루어져 있다.

 

정적 메모리 할당은 n개 호로 이루어진 아파트를 분양받는 것이다.

근데 노예 계약이라서 이 아파트에서 평생 살아야한다. 못 옮긴다.

101호, 102호, 103호.. (집을 가리키는 변수)

각 집에는 사람이 살 수 있다. (변수 할당)

101호에 홍길동이 입주 (할당 됨)

 

동적 메모리 할당은 주문제작 아파트를 분양받아서 전세를 내어주는 것이다.

원하는 크기의 아파트를 주문제작하여 누군가에게 전세를 내어주다가,

필요없어지면 아파트를 팔고 또 다른 아파트를 건설하여 전세 내어주는 방식

101호, 102호, 103호.. (집을 가리키는 변수)

각 집에는 사람이 살 수 있다. (변수 할당)

1동에 홍길동이 전세로 입주 (할당 됨)

실제 그 집의 주인은 나고, 들어가서 살고 있는 것은 홍길동임 (나 = 포인터)

 

종종 사람들이 C언어를 처음 배울 때 포인터에서 무너지는데

포인터를 전세집 주인이라 생각하고, 아파트 명의(메모리 공간)를 가리키는 변수라고 생각하면 됨.


파이썬

파이썬은 모든 것이 객체로 이루어져 있다.

 

메모리 공간을 할당받는 방식은 동적 메모리 할당이다.

메모리는 파이썬 메모리 관리자가 관리해준다.

 

모든 변수들이 객체의 값이 아닌 주소값을 가리키는 방식으로 할당된다.

a=0  : a는 0이라는 객체 가리킴

a=1  : a는 1이라는 객체 가리킴

 

그럼 메모리 해제는 어떻게 하는가?

파이썬 객체들에는 Reference Count (자신을 가리키는 개수) 변수가 존재함.

0이라는 인스턴스가 a=0 으로 참조될때 Count 1증가

그리고 a=1이 되면서 참조가 해제되며 Count 1감소

Count=0이 되면 해제

 

 

 

반응형
저작자표시 동일조건 (새창열림)

'Python > 문법' 카테고리의 다른 글

파이썬 가변 인자 *, *  (2) 2022.09.25
파이썬(python) 값 전달, 참조 전달  (0) 2021.05.09
파이썬(python) 리스트 잡기술  (0) 2021.05.09
파이썬(python) 문자열 중복제거 (unique)  (2) 2021.05.01
파이썬 (python) 자료형  (0) 2021.04.23
    'Python/문법' 카테고리의 다른 글
    • 파이썬 가변 인자 *, *
    • 파이썬(python) 값 전달, 참조 전달
    • 파이썬(python) 리스트 잡기술
    • 파이썬(python) 문자열 중복제거 (unique)
    snowman95
    snowman95
    (17~19) Unity/Unreal Engine 게임 프로그래머 (20~21) System Administrator ___________ (22~) React 웹 프론트앤드 개발자 __________ 깃헙 : https://github.com/snowman95

    티스토리툴바