c# -3

c# 의 변수 종류는 크게 2가지로 볼 수 있음.

값형식
참조형식

값형식
-> int a = 3 과같이 변수에 직접적인 값이 할당된 경우

참조형식

class a = new class a() ; -> a에 instance a의 주소가 할당됨 -> 참조형식

기본적으로 값형식은 null을 포함할 수 없음

참조 형식은 null 사용 가능;


값형식의 타입들은 메모리를 정확하게 형식의 값만큼 사용함

int -> 4byte

double -> 8 byte

참조 형식은 clr 의 기술적 요인 떄문에 한 오브젝트당 8byte씩 할당됨

고로

struct a{

int a;
double b;
}

16byte 할당됨



Decimal -> 실수형식 , 10^28 , 10^-28

double 보다 10배느림

-> 이걸왜쓰지?

금융이나 회계쪽에서 10단위로떨어지는 숫자를 처리하는데 적합함

-> double 형식은 처리할수 있는 자리 수는 많으나 정밀도가 떨어짐



array-> 초기화때 메모리 수를 정한후 사용하기떄문에 메모리 접근 속도가 빠름,

++ 해주면 다음 메모리 , - 해주면 전메모리주소



값형식 , 참조형식의 차이점
-> 값형식은 초기화시 값을 지정하지 않으면 0으로 세팅됨
-> 참조형식 초기화시 값을 지정하지 않으면 null 로 세팅됨
-> Exception handling 이 필요함



stack & heap



stack -> 메모리할당과 해제가 다이나믹하게 이루어짐,
static int Factorial (int x) { if (x == 0) return 1; return x * Factorial (x-1); }

재귀함수인 Factorial 을 호출할때 각 호출마다 int 가 할당되고
메소드가 사용되면 int 변수는 해제됨,


heap

object생성시 heap에 할당됨,
무엇이 생성되든 object라면 heap에 할당됨,
그리고 heap주소가 return 됨

왜 heap과 stack을 나눠서 메모리를 관리할까?

heap과 stack을 나누지 않을시 발생할 수 있는 문제 점 은?
나눴을떄 발생 하는 이 점 은?

왜 object는 heap에 할당될까?

왜 프로그램 구동시 모든 object들이 heap에 할당 될 까?

stack은 필요시에만 할당되서 자동으로 사라지지만,

heap은 아님 ,

고로 가비지 컬렉터는 힙을 주기적으로 서치하면서 사용하지않는 메모리를 찾아낸다고 할 수 있음

out keyword

-> 리턴이 하나의 값으로 정의될 수 없을떄
-> out 파라미터를 받아서 각 파라미터에 값을 넣어주면 호출자가 여러 리턴을 받을 수 있음




댓글

가장 많이 본 글