수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

리터럴 상수에 대해서

다슬

2023.04.01


질문 제목 : 리터럴 상수에 대해서질문 내용 : 제가 오늘 아침에 이런 질문을 했었는데요.int a = 4+5;여기서보면 4,5가 변수 a에 저장되기 전에 먼저 연산을 하잔아요. 그런데 연산을 하는건 cpu이고, cpu는 메모리공간의 데이터만 조작할 수 있잔아요. 그래서 4,5가 메모리 공간에 올라오는 거구요. 그런데 4,5의 메모리 공간에는 이름이 없으니깐 리터럴 상수라고 하는거잔아요.그렇다면int a = 7;여기서 7도 리터럴 상수가 되는건가요?
근데 7이라는건 연산을 진행하지 않잔아요. 만약 이게 리터럴 상수가 맞다면 4+5처럼 연산식이 아니고, 7만 있다고해도 그 값은 메모리 공간에 올라가는건가요?그리고 한가지 더 궁금한점은 리터럴 상수의 메모리공간의 크기는 어떻게 할 당되는거죠? 일단 메모리 공간이니깐 몇비트던 몇바이트던 그 데이터 값이 저장되어 있는 메모리 공간의 크기는 있을텐데 이건 어떻게 할당되는거고 어떻게 알 수있는거죠?그리고 int a = 1+b 에서 보면 1만 리터럴 상수잔아요. 그럼 b는 단지 숫자가 아니라는 이유로 리터럴 상수가 아니란건가요? 그럼 대체 b는 뭐죠?
그런데 어떤분께서 댓글로int a = 4+5; 는 절대 런타임에 계산되지 않습니다. 컴파일타임에 컴파일러가 이미 9로 계산해서 a에 넣어줍니다.
마찬가지로 int a = 7 하면 a에 7이 들어가 있는거지 7이 어디 따로 있는게 아닙니다.
그리고 일반적으로 상수는 목적파일에서 읽기만 가능한 영역에 컴파일때 최초 기록되어 프로그램 자체에 내장되고, 프로그램이 로드되면 그 읽기만 가능한 영역에서 읽어 쓰도록 되어 있습니다.
자세한건 elf 같은 실제 실행파일 뜯어보세요.
이런 원리로 문자열 상수나 정적배열을 지나치게 크게 만들경우 그만큼 프로그램의 목적파일 자체가 커지는 부작용이 있습니다. 그레서 파일에서 텍스트를 읽어오는거고, 동적할당이 필요해지는 거고요이렇게 달아주셨는데요.
제가 이 말 뜻을 정확히 이해를 못하겠어서 질문 올립니다.
댓글의 내용을 제가 이해할 수 있는 선까지 정리해보면, int a = 4+5;는 cpu에 의해 연산되지 않고, 컴파일타임에서 컴파일러가 연산을 하고 a에 값을 넣어주고, int a = 7도 a에 그냥 7이 들어가는거라고...
그렇다면 결국엔
4+5나, 7은 cpu에 의해 연산되지 않으니 메모리 공간안에 올라가지 않는다는 말이란 거죠?
그런데 제가 열혈강의 c 프로그래밍 책으로 공부를 하는데 거기에 나와있는 내용은int val = 30 + 40; 이란게 있으면,
30+40이라는 연산을 컴퓨터가 진행해야 한다는 뜻인데, 그러기 위해서는 30 이라는 정수도, 40 이라는 정수도 메모리상에 존재해야 한다. 그래야 컴퓨터가 연산을 할 수 있게 된다. 왜냐하면 덧셈이라는 연산은 cpu에 의해서 진행이 되는데, cpu는 메인 메모리상(ram을 의미함)에 존재하는 데이터들만 조작(연산)할 수 있기 때문이다.이렇게 책에 설명되어있는데, 그럼 댓글다신분 말이랑 책이랑 말이 쫌 안맞는거같아서 다시 물어봅니다.
일단 책에서는 3+4의 연산은 cpu가 하는데 cpu는 메인 메모리상에 존재하는 데이터들만 조작할 수 있기 때문에 3,4는 메모리상에 올라가게된다.
이거고, 댓글 다신분은
3+4의 연산은 cpu가 하는것이아니라, 컴파일타임에 컴파일러가 계산을해서 a에다가 값을 넣는다. 그러므로 3+4는 메모리상에 올라가지 않는다.여튼 재 최종질문은
1. int a = 3,4;에서 3,4는 메모리상에 올라가는지, 컴파일러에 의해 처리되는지 그냥 저 식에 관해서 쫌 디테일하고도 이해하기 쉽게 설명해주세요.
2. int a = 7; 이란것도 쫌 자세히 설명해주세요. 이해하기쉽게;
3. 댓글 단분의 내용을 제가 앞부분 밖에 이해를 못한거같은데 댓글다신분의 전체적인 내용을 잘 설명해주시면 감사하겠습니다.

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2694778 순열 계산요. 맛조이 2025-05-14
2694754 ShowWindow 함수를 이용하려 하는데 질문있습니다. (2) 파도 2025-05-14
2694731 리눅스 커널의 시작점 질문 미르 2025-05-13
2694702 이거 뭐가문제인가요 코드수정좀 (3) 맑은 2025-05-13
2694675 C언어 후위표기를 중위표기로 앨런 2025-05-13
2694646 안녕하세요 파일 합치기 함수! (1) 연블루 2025-05-13
2694618 잘몰라서 설명부탁드립니다. scanf 관련 (3) 파라 2025-05-12
2694590 이 코드가 뭐하는 코드일까요? #2 빵순 2025-05-12
2694559 동적할당으로 배열(2차원열)을 만드는데 있어 그걸 함수화시키는데... (1) 늘솔길 2025-05-12
2694532 네트워크에 관하여... (4) 황소자리 2025-05-12
2694503 프로그램 연산 후 바로 종료되는 현상 (6) Judicious 2025-05-11
2694450 while문질문입니다. (1) 허리품 2025-05-11
2694420 C언어 질문할게요(유니코드,자료형,버퍼,캐스트연산자) 은새 2025-05-11
2694370 내일까진데 함수호출 제발 도와주세요!!!!!!!!!11 들찬 2025-05-10
2694339 putchar()의 괄호 안에 int c=10;로 전에 선언된 c를 넣으면 안되는 이유에서 제가 생각한 것이 그 이유가 되는지 확인하고 싶습니다. (3) 미르 2025-05-10
2694316 이 코드 어디가 잘못되었는지 고수분들 ㅠㅠ (2) 나빛 2025-05-10
2694285 언어 공부하는 과정 좀 추천해주세요! (1) 아빠몬 2025-05-09
2694258 카운터.. 질문입니다. (4) 하늘빛눈망울 2025-05-09
2694229 단순한 질문이요 (8) 여름 2025-05-09
2694202 용돈을 가지고 할 수 있는 일을 여러가지로 출력하는 방법 좀 알려주세요! (2) 미나 2025-05-09
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com