'Study/C lang'에 해당하는 글 3건

코드를 컴파일 할때 보면 디버그 모드에서 잘되다가 릴리즈 모드에서 잘 않되는 경우가 있습니다.

저도 MFC 프로그래밍 할 때 디버그 모드에서 잘 되다가 릴리즈 모드에서 기능이 잘 안되곤 했습니다.

왜 그럴 까요?

 

컴파일 최적화를 살펴봐야 합니다..

 

연산자 

최적화 --> 의존성

 

 

 

'의존성' 을 변수를 기준으로 합니다.

 

변수 ==> 자료

 

연산 --> 변수 (의존성)

 



최적화

특정 변수(자료)에 대해 의존성이 존재하는 연산들을 구별 할 수 있어야 한다.


변수가 많은 것 , 적은 것  중에 좋은 것은 뭘까요??


변수는 메모리를 많이 쓰니깐, 많으면 않좋은 거 아닐까요??

변수는 적은 것이 좋다.

 

변수가 늘어나면 늘어날 수록 논리적 구조가 복잡 할 수 있다.

최적화 하기 어렵습니다..



최적화 된 코드를 작성하기 위한 방법

1) 컴파일러가 최적화 하기 좋게 작성해야 한다.

 최적화는 기계적이고, Low 레벨..


최적화 방해요소는??

1) 변수가 많은 경우 --> 최대한 변수의 개수를 줄여라..

2) 포인터 사용 주의 (자제)

 

 


저작자 표시
신고

'Study > C lang' 카테고리의 다른 글

코드 최적화 하기  (0) 2016.09.17
포인터와 메모리 핵심정리  (1) 2016.08.31
버블정렬 [Bubble Sort]  (2) 2016.08.09

WRITTEN BY
Profile
비타오백
Enjoy your stage!

받은 트랙백이 없고 , 댓글이 없습니다.
secret

1. 포인터와 메모리

- 포인터 - 메모리의 특정위치를 가리킬 떄 사용

- 구성 - 정수형으로 된 메모리 주소가 저장


2. 포인터 선언방식

포인터는 *  를 사용하여 선언

이미 선언된 포인터에 * 를 사용하면 포인터에 저장된 메모리 주소(역참조)하여

값을 가져오거나 저장가능



자료형 *포인터이름;        //포인터 선언


*포인터;                        // 포인터를 역참조하여 값을 가져옴

*포인터 = 값;                 // 포인터를 역참조하여 값을 저장


변수의 메모리 주소를 구할 때 주소 연산자 & 를 사용


포인터 = &변수;      // 변수의 메모리 주소를 포인터에 저장



그림 1.  포인터* 와 & 연산자의 관계


예제)


1
2
3
4
 
int age = 20;
int *pointer = &age          // 포인터를 선언하고 변수의 메모리 주소로 저장
printf("%d\n"*pointer);    //20 
cs


 그림 2.  포인터와 포인터 역참조




3. 포인터와 주소의 자료형


int *a;             //pointer to int 라고 읽음

I * a               //  변수의 역참조, pointer to 제거하여 int 로 만듬

int b;              // &b 와 같이 변수의 주소를 구한 것 : address of int 라고 읽음



char *cPtr1;                // char형 포인터 선언
*cPtr1 = 'a';                // char의 크기 1바이트만큼 역참조하여 값을 저장
    
short *numPtr1;            // short형 포인터 선언
*numPtr1 = 100;          // short의 크기 2바이트만큼 역참조하여 값을 저장

int *numPtr2;              // int형 포인터 선언
*numPtr2 = 100;         // int의 크기 4바이트만큼 역참조하여 값을 저장

long long *numPtr3;    // long long형 포인터 선언
*numPtr3 = 100;        // long long의 크기 8바이트만큼 역참조하여 값을 저장


4. void 포인터 (범용 포인터)

자료형 크기가 정해지지 않았으므로 역참조 할 수 없음


5. 이중 포인터


자료형 **포인터이름;       // 이중 포인터 선언

**포인터;                     // 이중 포인터를 역참조하여 값을 가져옴
**포인터 = ;              // 이중 포인터를 역참조하여 값을 저장


int **a;     //pointer to pointer to int


6. 메모리 할당 하기

메모리를 바이트 단위로 할당 할 수 있다. 메모리를 할당 했으면 반드시 free 함수로 메모리 해제 필요


자료형 *포인터이름 = malloc(크기);         // 일정 크기만큼 동적 메모리 할당

free(포인터);                                        // 동적 메모리 해제


7. 메모리를 특정값으로 설정하기


memset(포인터, 설정할값, 크기);


8. 널포인터  (null pointer)

포인터가 아무것도 가리키지 않은 상태


자료형 *포인터이름 = NULL;        //포인터에 NULL 할당


저작자 표시
신고

'Study > C lang' 카테고리의 다른 글

코드 최적화 하기  (0) 2016.09.17
포인터와 메모리 핵심정리  (1) 2016.08.31
버블정렬 [Bubble Sort]  (2) 2016.08.09

WRITTEN BY
Profile
비타오백
Enjoy your stage!

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. 잘 읽었습니다. :)
secret


수에 대한 정렬을 해야 하는데 아는 것은 없고,찾다보니 버블정렬로

구현하는 방법이 있었네요..

정렬은 데이터 처리에 기본이죠..


데이터 처리의 기본은 정렬과 찾기 입니다..


정렬(Soring) 이란?

데이터를 순서대로 나열하는 것


100, 99, 98, , , , , , , 2, 1        ▶ 내림차순


1,2,3, , , , , , , , , , , , ,99, 100   ▶ 오름차순



따져봅시다..  5개 숫자를 오름 차순으로 정렬하는데

규칙이 있습니다. 좌측이 크면 배열을 바꾸는 겁니다.

종이에 칸을 만들고 적어보면 이해가 됩니다.




4회전을 하여 오름차순 정렬을 마쳤습니다. 잘 보면 규칙이 보입니다.

숫자가 5개인데 회전은 4번 했습니다. N - 1 번 움직임을 알 수 있습니다.


배열 개수를 아무거나 두고 하면 이렇게 나옵니다.
회전 밑에 보면 배열 번호를 붙였습니다. 이것은 배열위치를 바꾼 번호입니다.

코드상으로 버블 정렬을 해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

//bubble_sort.c
#include
 <stdio.h>
 
int main()
{
  int a[] = {25,65,45,35,55};
 
  int i , j , tmp, n;
 
  n = sizeof(a) / sizeof(int);
  
  puts("------------------");
  puts("**** 정수 정렬 ****");
  puts("------------------");
 
  //원본출력
  puts("**** 원 본 출 력 ****");
  for(i = 0; i < n ; i++)
     printf(" a[%d] = %d\n", i, a[i]);
 
  //거품정렬(Bubble sort)
  for( i = 0; i < n - 1; i++)
  {
    for(j = 0; j < n - 1 -i; j++)
   {
  if(a[j] > a[j+1])
{
  tmp = a[j];
      a[j] = a[j+1]; 
      a[j +1= tmp;
}
    }

}
 
    puts("\n **정렬 후 출력**");    
    for (i = 0; i < n; i++)        
       printf(" a[%d] = %d \n", i, a[i]);    
 
   puts(" ---------------");

  } 
 
}


 cs






저작자 표시
신고

'Study > C lang' 카테고리의 다른 글

코드 최적화 하기  (0) 2016.09.17
포인터와 메모리 핵심정리  (1) 2016.08.31
버블정렬 [Bubble Sort]  (2) 2016.08.09

WRITTEN BY
Profile
비타오백
Enjoy your stage!

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. for문 코드 잘 못됐네요. 결과가 제대로 안 나옵니다.

    for( i = 0; i < n - 1; i++) 문의 대괄호 닫는 위치를 조정해야 할 것 같습니다.
secret