이중 포인터 개념 정리

카테고리 없음 2014. 2. 13. 23:32

int arr[2][3]; 로 int형 배열이 선언되어 있을때 원소의 개수는 몇개 일까요?

6개 같지만 2개입니다. 2차원 배열처럼 보이지만 실제 메모리는 1차원 이므로 2차원 배열이 아니라

1차원 배열의 확장입니다.

 

배열의 포인터는 int (*pArr)[3] = arr; 로 표현이 가능합니다.

 ☞ int *pArr[3]으로 작성하면 컴파일러는 int형 포인터를 리턴하고 변수가 배열인 함수로 해석합니다.(괄호 필수)

 

2차원 동적 배열을 선언할때 대부분

int **myArr = (int**)calloc(2, sizeof(int*));

for(int i=0; i<3; i++)

    myArr[i] = (int*)calloc(3, sizeof(int));

으로 선언하고 사용합니다. 이때 선언시 2차원 포인터를 사용해서 2차원 배열은 2차원 포인터를 사용하는것으로

생각하기 쉽습니다.

하지만 이차원 포인터로 생각하는 이유는 참조의 참조 2번의 참조를 거치기 때문에 사용하는것이지,

꼭 2차원 배열을 동적할당할 때에는 2차원 포인터를 사용하지 않아도 됩니다.

☞  int (*myArr)[3] = (int(*)[3])malloc(sizeof(int)*2*3); // c 스타일

     int (*myArr)[3] = static_case<int(*)[3]>malloc(sizeof(int)*2*3); // c++ 스타일

 

[정리]

1. 포인터 : 다른 지역의 변수를 접근하기 위해 사용한다.

2. 배열과 포인터 : 배열명은 자신의 첫 번째 원소의 시작 주소를 의미하는 상수 포인터.

                          이때 배열의 타입은 원소의 타입이여야 하고, 배열명을 사용하여 포인터에 저장할 경우, 

                          배열 전체 타입이 하나의 원소의 타입으로 축소된다. 이것을 decay(퇴화)라고 한다.

3. 배열포인터 : 배열 전체를 의미하는 포인터  // 타입(*포인터)[길이]

4. 포인터의 연산 : 포인터간의 연산(정수포함)은 제한적인 연산만이 가능하다.

                          포인터 - 포인터 = 정수

                      포인터 + 정수 = 포인터

                      포인터 - 정수 = 포인터

 

 

5. 함수의 포인터

     함수의 타입 : 리턴 타입과 매개변수 전체가 함수의 타입

     함수의 선언 : 함수의 심볼은 반드시 리턴 타입과 매개변수 사이에 위치

     ☞ 리턴타입 (*포인터명)(매개변수)

 

SDN(Software Defined Network)

카테고리 없음 2014. 2. 13. 20:48

SDN이란 무엇일까요?

기존의 전통적인 네트워크는 각각의 라우터, 스위치 허브등의 노드들의 링크로 구성되어 있습니다.

[그림1] 전통적인 네트워크 망

 

하지만 이러한 기존 네트워크는 여러가지문제점이 많습니다.

그중 한가지는 OSI 7계층등 여러개의 연결로 네트워크를 통하여 [그림2]와 같이 프록시 장비, 방화벽, IPS/IDS등의 장비

등은 각각 OSI계층으로 분할되어 있습니다. 이러한 절차를 거치다 보면 네트워크 전송 시간이 오래 걸리며, HW+SW 등의

분할로 관리가 어려운 측면이 많습니다. 따라서 이러한 단점을 보완하기 위해 [그림3]과 같이 단일 장비(HW+SW)로 구성

해서 속도면과 장비 관리 측면이 쉬운 장점이 있습니다.

[그림2] 기존 네트워크망의 문제

 

[그림3] SDN 네트워 조직망

 

[Open Flow]

SDK에 첫번째로 지정된 표준입니다. 하드웨어 계층 레이어에서 네트워크 디바이스 컨트롤러 들과의 통신을 정의합니다.

Openflow스위치는 테이블[그림5]을 관리해 룰을 지정, 제한합니다. 각 테이블은 어플리케이션을 통해 지정할수 있고,

테이블에 없는 주소는 라우팅(포워딩)하는 기능(컨트롤러 [그림6])을 수행합니다. 리눅스 기반에서 돌아가는 어플리케이

션은 동시에 여러개의 어플리케이션이 실행이 가능하며 사용자의 필요에 맞게 SW를 설계하여 사용할수 있는 장점이 있습

니다.

 

[그림4] SDN 아키텍처

[그림5] Openflow 스위치 테이블

 

 [그림6] SDK 구성 이미지

 

SDK의 전망

- 모든 스위치를 컨트롤러에서 처리하니 관리하기 쉽다.

- 하나의 정책에 일관되어 보안에 좋다

- 자주 움직이는 컨트롤은 새로운 포트번호 할당등을 통해 유연하게 대처가 가능하다.

- 기존의 장비보다 가격이 싼 장점이 있다.

- 구글가 아마존, IBM, CISCO, 마이크로소프트 등 SDN 장비 교체하는 추세이다.

 

개발

 - POS : 파이썬 기반

 -  NOX : C++기반