조회 수 380 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
64 언어/기타 코인의 피아노 강좌 (Sevizi 옮김) file Sevizi 2005.05.30 1128
63 언어/기타 콘솔게임 소프트웨어의 개발언어는? 아란 2006.08.05 800
62 언어/기타 콤보 스크립트 귀여븐닌자 2006.08.23 2297
61 언어/기타 퀘스트를 만들어 보자, 다크엔젤94 2005.09.16 449
60 언어/기타 크리티컬 데미지, 미쓰(회피) 만들기 조모군 2005.05.28 1153
59 언어/기타 키를 조합해 메뉴열기 file Ark。 2006.05.17 632
58 RPG Maker 키보드 마우스를 만들어 보자! 그노에즈 2006.07.29 981
57 언어/기타 키입력의 처리란 무엇인가? 2005.07.10 1078
56 RPG Maker 타이틀을 아주 쉽게 제작하는 방법 사토루 2005.06.03 1929
55 RPG Maker 턴 알피지 구조 Rich 2006.07.06 1148
54 언어/기타 턴방식 틀 file 야미토츠바사 2005.08.22 482
53 언어/기타 턴알에서 뽑기로 공격해보자. z-z 2006.08.28 1281
52 언어/기타 턴알에서 순간데미지 2배이상으로늘리기[턴알] Dship 2007.05.21 1446
51 언어/기타 턴제 액션알피지 다크세이버™ 2005.09.27 828
50 RPG Maker 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다! 2 file 정궈니 2016.03.12 2757
49 언어/기타 특성 몬스터 효과부여 린쌍 2005.12.02 509
48 RPG Maker 특정 프로그램에서 mp3파일을 wav로 넣고 싶을때 Vermond 2006.07.25 717
47 RPG Maker 파티 소환 시스템! Lathanter 2005.12.30 728
46 RPG Maker 판타지 몬스터 완전 정복[펌] 조모군 2005.09.16 779
45 언어/기타 페인터(코럴) 브러쉬 세팅 공유 :) 8 file 샤이귤군 2015.03.28 1477
Board Pagination Prev 1 ... 42 43 44 45 46 47 48 49 50 51 Next
/ 51






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

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