몽상실현개발주의

[따배씨] 4.2 sizeof 연산자 본문

Language/C

[따배씨] 4.2 sizeof 연산자

migrationArc 2021. 5. 12. 23:23

[따배씨] 4.2 sizeof 연산자

따배씨 - 따라하며 배우는 C언어

4강 문자열과 형식 맞춘 입출력

4.2 sizeof 연산자

#include <stdio.h>

int main(){
    /* 1. sizeof basic types */
    
    int a = 0;
    unsigned int int_size1 = sizeof a;
    unsigned int int_size2 = sizeof(int);
    unsigned int int_size3 = sizeof(a);
//    함수의 형태로 사용되나 연산자
    
    size_t int_size4 = sizeof(a);
    size_t float_size = sizeof(float);
    
    printf("Size of int type is %u bytes.\n", int_size1);
    printf("Size of int type is %zu bytes.\n", int_size4);
    printf("Size of int type is %zu bytes.\n", float_size);
//    %zu: size_t 에 대응하는 형식 지정자
    
    
    return 0;
}
  • sizeof 의 표기
    • sizeof a == sizeof(int) == sizeof(a);
  • size_t
    • unsigned int 이지만, 운영체제 상에서 가능한 오브젝트의 최대 크기를 저장하도록 할당
      • 32bit 운영체제에서는 32bit unsigned integer, 64bit 에서는 64bit unsigned integer
      • unsigned int 의 경우에는 64bit 운영체제라도 32bit unsigned integer 일 수도 있다는점이 차이
    • %zu: size_t 에 대응하는 형식 지정자

 

 

 

#include <stdio.h>
#include <stdlib.h> // malloc() - memory allocation

int main(){
    /* 2. sizeof arrays */
    
    int int_arr[30];
    
    int* int_ptr = NULL; 
    int_ptr = (int*)malloc(sizeof(int)*30);
    
    printf("Size of array = %zu bytes\n", sizeof(int_arr));

    printf("Size of pointer = %zu bytes\n", sizeof(int_ptr));
 
    
    return 0;
}

 

int* int_ptr = NULL
  • 포인터를 사용하여 주소값을 저장할수 있는 공간 생성
int_ptr = (int*)malloc(sizeof(int) * 30);
  • 30개의 정수를 저장 할 수 있는 배열 (메모리 공간) 을 요청
  • 대표하는 메모리 주소(첫번째 주소)를 int_ptr 에 저장
printf("Size of array = %zu bytes\n", sizeof(int_arr));
  • 정수 30개가 저장될 배열의 메모리 크기인 120 bytes 가 출력됨
    • int_arr[30]의 경우 실제 120byte의 공간을 할당 받음
    • int_arr 이 변수로 사용될 때에만 주소값 형태로 바뀌어 사용된다고 해석 됨
    • 복잡하게 생각할 것 없이 주소값이라고 생각하면 편함
printf("Size of pointer = %zu bytes\n", sizeof(int_ptr));
  • 배열의 대표 주소값(정수) 이 저장될 공간인 8byte 출력
int int_arr[30];
int_ptr = (int*)malloc(sizeof(int)*30);
  • int int_arr[30]: 컴파일 되는 메모리 공간 120byte를 할당
  • malloc(): 런타임에서 메모리 공간이 결정됨

 

 

 

#include <stdio.h>

int main(){
    /* 3. sizeof character array */
  
    char c = 'a';
    char string[10];
    
    size_t char_size = sizeof(char);
    size_t str_size = sizeof(string);
    
    printf("Size of char = %zu bytes\n", char_size);	// 1 byte
  
    printf("Size of string = %zu bytes\n", str_size);	// 10 byte
    
    return 0;
}

 

char string[10];
  • maximally 9 character + '/0' (null character)
  • 저장공간의 마지막에 null character 하나를 저장하여야 하기 때문에 공간 하나를 사용하지 못함

 

 

 

#include <stdio.h>

struct Mystruct
{
    int i;
    float f;
};

int main(){
    /* 4. sizeof structure */
    
    printf("Size of structure = %zu bytes\n", sizeof(struct Mystruct));
    
    return 0;
}
  • struct(구조체) 의 경우 사용한 자료형의 메모리 합으로 할당 됨

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments