조회 수 413 추천 수 2 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
배열을 선언할 때,
대개의 .NET 언어들은 랩핑시켜둔 고유의 키워드(인덱서)를 이용하여
int[] m_array = new int[5];  
와 같이 일차원 배열부터 다차원 배열까지 쉽게 선언해 사용할 수 있습니다.
그러나 이렇게 생성된 배열은 실제론 System.Array의 인스턴스이고 그 때문에 어쩔 수 없이 갖게 되는 몇 단점들이 있습니다.

바로 초기화작업으로 인한 느린 생성과 객체 참조 시의 어쩔 수 없는 오버헤드입니다.
(물론 이는 앞으로 보여줄 스택기반배열에대한 상대적인 비교입니다.)
사실 위와같이 일반 배열을 사용해도 보통 크게 문제될건 없지만,
어마어마한 반복작업탓에 약간의 오버헤드도 큰 문제를 야기할수 있는 때에
System.Array의 인스턴스가 아닌
unsafe
{
        //stackalloc 키워드는 메모리할당작업만을 합니다.
        //인스턴스화와 같이 불필요한 초기화작업은 하지 않습니다.
        int *stack_based_Array = stackalloc int [20];
}
와 같이 비안전영역에서 포인터를 사용하여 스택기반배열을 선언, 사용할 수가 있습니다.
*C#.NET 에서 포인터는 unsafe 블록을 선언하여 그 내부에서만 사용할 수 있습니다.

이렇게 stackalloc키워드로 할당이 된 배열은 stackalloc키워드가 반환하는 포인터를 이용해
        *(stack_based_Array+1) = 1;
와 같이 일반적인 포인터를 다루듯이 배열의 각 원소들을 접근할수도있고

        stack_based_Array[1] = 1;
와 같이 인덱서를 사용해서도 접근이 가능합니다.

그렇지만,
보통 C#에서의 포인터 사용을 권하지 않는것처럼
역시 이 방법도 배열을 선언하는 일반적인 방법으로는 추천할 수 없습니다..
확실히 이를 통해 오버헤드없는 성능 위주의 배열을 생성할순 있겠습니다만,
System.Array가 제공하는 여러가지 유용한 멤버들(Length 속성 등)을 사용할수 없을 뿐더러

unsafe
{
        int *stack_based_Array = stackalloc int [20];
        //할당된 메모리 영역 밖을 가르키는 인덱서입니다.
        stack_based_Array[30] = 6;
}
와 같이 할당된 영역이 아닌 전혀 엉뚱한 영역을 접근하여
심각한 데이타 파괴를 야기할수도 있기 때문입니다.
[홀개발자의 작업이라면 몰라도, 다른 개발자들이 깜빡 실수를 할수도 있거든요.(고의라던가..)]

PS : System.Array의 인스턴스라는 이야기에
(자주 사용하시는)ArrayList를 사용할때처럼 new 키워드로 인스턴스화 하시려는 분이 계신데,
System.Arrayabstract가 붙어있는 추상 클래스이고
인스턴스를 생성하기위해선 CreateInstance라는 메서드를 사용해야합니다.
*인자는 배열의 타입과 크기를 받습니다.
(추상 클래스는 .NET 2.0부터 추가된 static이 붙는 정적 클래스처럼 인스턴스화가 되지 않는 특성을 가지고 있습니다.)
--------------------------------------------------

기분이 나면 언어 스펙부터 차근차근 써보도록 하겠습니다.
출저는 http://geekproject.net/ (제 블로그)입니다. 저좀 많이 사랑해주세요^^ [하악하악]
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1004 언어/기타 목에 좋은것들.... 1 켄타 2005.05.17 2070
1003 RPG Maker 좌표대입(ARPG) 사고실험.[이론편] 늑대소년 2005.05.18 1509
1002 언어/기타 스킬데미지를 10000이상 뜨게해보자.(턴알,액알 둘다) Dship 2005.05.18 1888
1001 언어/기타 Fruity Loops에서 FX탭 사용방법 (1) Mr^Lee 2005.05.18 1709
1000 RPG Maker RPG XP 배워보기 <변수를 마스터하자 상편> 1 덩키동크 2005.05.18 2206
999 언어/기타 100%고수강의!(변수이론) 늑대소년 2005.05.18 2470
998 언어/기타 나름대로 - 변수강좌 켈리시 2005.05.18 1624
997 언어/기타 변수(變數)의 기초 바람을 가르는 자 2005.05.19 1270
996 언어/기타 이번에는 오프닝을! 장아찌 2005.05.20 2635
995 RPG Maker 액션RPG 속성무기를 만들어보자!! 천룡수 2005.05.20 1538
994 RPG Maker 아르바이트를 만들자 . - 1 Norid 2005.05.20 1739
993 언어/기타 플레이어가 자기의 이름을 정한다 . [영어] file Norid 2005.05.21 1780
992 언어/기타 레벨업을 하라 . 그리하면 살것이니.. 1 file Norid 2005.05.22 1574
991 [RPG2000] 가이드북 -7- 창조도시 2005.05.22 11106
990 언어/기타 나라의 PHP 초보탈출 - 1편 나라 2005.05.22 1732
989 RPG Maker 경영 RPG만들기[콤플리트판] 늑대소년 2005.05.24 2039
988 [RPG2000] 가이드북 -1- (표지내용무) 창조도시 2005.05.25 14508
987 언어/기타 [c++] 생성자,파괴자 챔피온 2005.05.26 1668
986 언어/기타 《완벽하게 현실적인 게임을 만들려면 해야되는 조작 몇 가지》-[上편] 자이크로 2005.05.27 1852
985 언어/기타 [R2000] 초간단 단거리액알 2 비밀소년 2005.05.27 2521
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)