수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • 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

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

번호 제 목 글쓴이 날짜
2700150 꼭좀 도와주세요ㅠㅠㅠ 호습다 2025-07-02
2700095 연산문제...질문... 오빤테앵겨 2025-07-01
2700070 while문 , 3의배수 출력하는 프로그램좀 짜주세욤. 횃불 2025-07-01
2700041 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? 헛장사 2025-07-01
2700012 배열// (1) 전갈자리 2025-07-01
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
2699763 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) 미라 2025-06-28
2699555 c언어 다항식을 입력을 했는데 왜 출력이 안될까요? 피스케스 2025-06-27
2699528 C언어 포인터연산 질문입니다. (3) 안녕나야 2025-06-26
2699476 끌어올림;;달력 짜봤는데요 이 소스 줄일 수 있나요? - 스샷첨부 (2) 클라우드 2025-06-26
2699444 [좀 급함] system("explorer [주소] ") 문에 변수를 사용할 수 있나요? 알 2025-06-26
2699415 파일//read//와 배열 아란 2025-06-25
2699386 구조체 안에 일부분만 char 배열에 복사하려면 어떻게 해야하나요? (1) 미즈 2025-06-25
2699361 연결리스트 정렬하는 부분에 대해서 질문 드립니다 아이처럼 2025-06-25
2699304 [기초]아직 안주무시는분 계신가요..?포인터배열? 좀 도와주세요. 놀리기 2025-06-24
2699272 printf() 함수이용해서 프로그램 만들기 질문요! (5) 다가 2025-06-24
2699221 PUSH와 POP코드를 더 간단하게 어떻게 해야할까요? 파라미 2025-06-24
2699192 설치오류가 자꾸 나요 한번봐주세여~ (1) 소녀틳향기 2025-06-23
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

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