난 C/C++ 를 더 오랫동안 잘 써왔다.
최근들어서 그래도 이리저리 뒤적거리는게 python.
C/C++에 비해 유지보수의 장점도 있고, 기본제공되는 라이브러리도 다양하고, 여튼 상당히 괜찮은 느낌이라서 사용중인데... closure라는게 있길래 좀 살펴봤다.

알아보니..음 뭐랄까. C++의 binding과 비슷했다. (boost 의 bind)
a,b를 인자로 가지는 func(a,b)이 있다손 치면, b라는 녀석을 고정시키고 func(a)를 만들어낸달까.

뭐 사실... 그닥 실용적인 예제는 모르겠다. -_-;;;;
굳이 꼽자면 Command 패턴에 사용하기 좋다는것. (bind를 활용해서도 잘 쓰니까...)
그정도...? 그래도 이런게 언어적으로 지원되는거랑 안되는거랑은 많이 차이난다.
쓸려고하는데 지원이 안되면 꼼수로 뱅뱅 돌아가야되거든...ㅎ

캐쉬만 사용하니까 그것만 언급함. (hit/miss 만 볼것이므로)

valgrind --tool=cachegrind [실행파일]

끝!
gcc는 실제사용 할때와 동일하게 컴파일. (-g 옵션을 하면 opannotate 를 사용할 수 있다.)

   – $ opcontrol --reset
   – $ opcontrol --event=[추가할이벤트]   (디폴트는 CPU cycle)
   – $ opcontrol --start (--no-vmlinux)
   – 여기에서 실제 벤치마킹 수행
   – $ opcontrol --dump
   – $ opcontrol -h
   – $ opreport -l  [실행파일]
   – $ opannotate --source [실행파일]   ===> c 소스파일에 각 라인별 counter가 나온다.


각 CPU 별로 추가할 event는 http://oprofile.sourceforge.net/docs/ 참조.
gcov는 gcc와 함께 사용되는 code coverage 툴이다.
사용방법을 기재해둔다.

1. 연관된 gcc 옵션 : compile : -g --coverage  / link : -fprofile-arcs
2. 1번의 옵션으로 컴파일 후 실행.
3. gcov -b [소스파일]
4. 소스파일.gov 를 본다.


VC++에서 코드커버리지 하는거... 발견한것 링크~


기존의 C++에서는 복사생성자 및 대입연산자에서는 무조건 deep copy를 해야했다.
예륻 들어 vector<> 같은 녀석이 있었고 그게 사이즈가 크다면 모조리 다 copy부터 했다는뜻.
그러나... RValue Reference의 경우는 Shallow copy만 해도 된다!
(간단히 말해 포인터만 옮겨간다...라고 생각하믄 될듯)

궁금한건...복사생성자,대입연산자는 C++이 기본으로 만들어주는게 있는데,
RValue Reference를 사용하는 move 연산자들은... 자동으루 해주나? ㅡ.ㅡ;;
그건 잘 모르겠네 흠.

뭐 VS 2010 부터 지원된다고 하니 (gcc는 4.0 이상의...뭐 마이너 버젼이 있나본데 자세히는 잘...)
꽤 많은 유저들이 은연중에 사용할듯.
STL 만 해도 그냥 기존처럼 써도 많은 부분이 성능향상이 있으니.
Freescale MSC8156 이라는 DSP를 사용중이다.
memory access time이 매우 중요한 이슈라서...Reference Manual을 읽고 좀 정리해본다~

구조는 DCache, M2/L2 memory, M3, DDR 으로 구성되어있다.
(아래 그림 참고)

M3 부터는 DSP Subsystem 을 벗어나, 다른 코어 및 periperal 들과 함께 사용하는 bus에 접근하게 된다. 그러므로, 실제 access time이 매우 오래 걸릴 수 있다.
C언어에서 this라니 묘하긴하지만.

struct A
{
   int a, b;
};
가 되어있을때, A 구조체의 b 포인터에서 A 구조체의 포인터를 거슬러 올라가서 구하는? 뭐 그런것.

#define container_of(ptr, type, member) ({   \
const typeof( ((type *)0->member ) * __mptr = (ptr);   \
(type *)( (char *) __mptr - offsetof(type, member) ); } )

길기도 하지 -_-;;;
A structure로 예를 들어보자면, 코드는 다음과 같이 활용될수있다.

void foo (int * b)
{
struct A * p;
p = container_of(b, struct A, b);
}

좀 복잡하긴함...^^;;
사람이 읽기 편하게 마킹하는게....몇가지 있는데

0xDEADBEEF,
0xBADDCAFE,

등등?

25.306 chapter 5 Possible UE radio access capability parameter settings

에서 찾아볼 수 있다.

 

A UE that supports categories greater or equal to category 13, also supports E-DPDCH.
A UE that supports categories greater or equal to category 13, also supports MAC-ehs.
UEs of categories 13, 15, or 17 also support category 9 when MAC-ehs is configured.
UEs of categories 14, 16, or 18 also support category 10 when MAC-ehs is configured.

 

카테고리 13에서 64QAM 지원시에는 F,Q 테이블을 참고하며, 16QAM 시에는 C,D 테이블을 참고한다.

(여기서 테이블은 CQI table을 의미)

C,D 테이블은 각각 카테고리 9,10 에서 사용되는 테이블이다.


즉, MAC-ehs 라고 bit align 될수있다는 얘기.

+ Recent posts