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 파라미터를 받아서 각 파라미터에 값을 넣어주면 호출자가 여러 리턴을 받을 수 있음
값형식
참조형식
값형식
-> 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 파라미터를 받아서 각 파라미터에 값을 넣어주면 호출자가 여러 리턴을 받을 수 있음
댓글
댓글 쓰기