Search

왕종휘_0711

Java 메모리 할당

Java의 배열은 Stack 영역에 만들 수 없다.
// new 연산자는 heap 영역에 데이터를 동적할당 한다는 의미 int[] arr = new int[50]; new Integer(1)
Java
복사
int a; // 4 int b; // 4 // dock 객체는 20 바이트라고 가정 Dock dock = new WhiteDock(); // 8 // stack 에 16, heap 에 20 바이트 할당
Java
복사

C언어 메모리 할당

int a; // 4 int b; // 4 int arr[10]; // 8 + 40 // stack에 56 바이트 할당
C
복사
int a; //4 int b; //4 int* arr = malloc(sizeif(int)*10); // 8 // stack 에 16, heap에 40 바이트 할당
C
복사

정적할당과 동적할당

정적할당 런타임 중 사이즈 변경 불가능 메모리 자동 할당, 반납
동적할당 런타임 중 사이즈 변경 가능 메모리 수동 할당, 반납
ArrayList는 어떻게 무한히 데이터를 받을 수 있을까? 내부적으로 크기가 두배인 배열을 생성해 기존 값을 붙여넣고 참조를 변경한다.

1차원 char 배열에 문자열 넣기

#define NAMES_COUNT 10 // 이름이 10개 들어가야 한다는 뜻 #define NAMES_SIZE 200 // names 배열의 크기가 총 200바이트 라는 뜻 int main(void) { char names[NAMES_SIZE]; int len = NAMES_SIZE/NAMES_COUNT; for(int i =0;i<NAMES_SIZE;i+=len){ printf("%d번째 사람 이름을 입력해주세요 : ",i/len+1); scanf("%s", names+i); } for(int i =0;i<NAMES_SIZE;i+=len){ printf("%d 번째 사람 이름 : %s\n",i/len+1,names+i); } return 0; } // names (1번째사람이름, 2번째 사람이름 을 입력했을 때) // 1, 번, 째, 사, 람, 이, 름, \0,..., 2, 번, 째, 사, 람, 이, 름, \0, // names^ (names+20)^
C
복사

2차원 char 배열에 문자열 넣기

int main(void) { char names[NAMES_COUNT][20]; for ( int i = 0; i < NAMES_COUNT; i++ ) { printf("%d번째 사람의 이름을 입력해주세요 : ", i + 1); scanf("%s", *(names+i)); } for ( int i = 0; i < NAMES_COUNT; i++ ) { printf("%d번째 사람의 이름 : %s\n", i + 1, *(names+i)); } return 0; }
C
복사
1차원 배열과 2차원 배열의 비교 char one[200] ; 1차원 배열의 경우, one+i*20one[i * 20]의 주소값을 의미하고 char two[10][20]; 2차원 배열의 경우, *(two+i)two[i][0]의 주소값을 의미한다.
일다원이든 다차원이든 할당되는 메모리 구조는 다르지 않지만 다차원 배열은 더 편리하게 사용할 수 있는 문법이다.