티스토리 뷰
안녕하세요, IT디자이너입니다.
이번에는 구조체의 멤버변수와 캐시라인 무효화에 관하여 포스팅하도록 하겠습니다.
우리가 어떤 구조체를 선언하여 멤버변수를 수정하고 사용하는 것을 예로 들어보겠습니다.
#include <iostream>
struct Data {
char a;
int b;
};
int main()
{
Data da = { 1,2 };
int b = 10;
da.a += da.b;
printf_s("%d",da.b);
}
이렇게 쓰기와 읽기를 반복하는 과정으로 보았을 때 해당 멤버변수는 캐시에 있을 확률이 높습니다.
하지만 L1 캐시는 cpu의 1개의 코어당 1개씩 할당되어있습니다.
만약에 2개의 코어에 한개의 멤버변수가 각각 할당되어 있고, 1개의 코어에서 해당 멤버변수에 쓰기를 하였을 때
다른 코어에서는 그것을 알 수 없습니다. 즉, 데이터 쓰기를 하기 전의 상태입니다.
그렇기 때문에 쓰기를 하지 않는 캐시라인을 지워버려야 합니다.
이것을 "캐시 무효화"라고 합니다. 하지만!!! 만약에 그 캐시라인에 다른 사용해야 할 다른 데이터가 있으면 번거롭게
지우고 다시 캐시하는 과정을 거쳐야 합니다.
이것을 막기위 우리는 해당 멤버변수를 64byte에 경계에서 할당될 수 있도록 정의할 수 있습니다.
만약 int b가 쓰기로 인하여 데이터 변경이 자주 발생하는 멤버변수일 경우 위의 사진처럼 __declspec(align(64)) int b;의 형태로 선언하면 됩니다.
그 이유는 해당 멤버변수가 64byte 경계의 설 수 있음으로서, 64byte크기인 캐시라인을 다 차지하며, 해당 캐시라인에 다른 데이터가 캐시되는 것을 방지할 수 있습니다.
캐시라인을 잘 활용하고 캐시hit율을 높일 수록 좋은 성능의 프로그램이 완성됩니다.!!!!
이상 IT디자이너였습니다.
감사합니다.
'Language > C 언어' 카테고리의 다른 글
C언어 구조체 패딩값 조절하기 (0) | 2020.04.01 |
---|---|
C언어의 문자 & 문자열 함수!! (표준 입출력 함수-1) (0) | 2020.03.28 |
C언어 구조체의 숨겨진 특징 (0) | 2020.03.27 |
if문과 switch 문의 오해와 진실 & 어셈블리어 (0) | 2020.03.26 |
C언어 열거형의 정의와 의미 (0) | 2020.03.25 |
- Total
- Today
- Yesterday
- C언어 #IT디자이너
- C언어 #C++ #시간 함수 #타이밍 맞추기 #timer interrupt #IT디자이너
- C언어 #C++ #캐시hit #캐시라인 #캐시무효화
- C언어 #C++ #어셈블리어 #함수 호출 규약 #IT디자이너 #비쥬얼 스튜디오 #IT
- C언어 #C++ #어셈블리어 #IT디자이너 #비트연산자 #연산자 #C언어의 비트 연산자
- C언어 #C++ #IT디자이너 #C++ 함수
- C언어 #C++ #어셈블리어 #재귀함수 #IT디자이너
- C언어 #C++ #switch #if #어셈블리어 #switch문 사용 이유 #IT디자이너
- 어셈블리어 #IT디자이너 #C언어 #C++언어 #어셈블리 #어셈블러
- QUEUE #큐 #자료구조 #원형 큐 #Circle Queue #IT디자이너 #큐 과제 #C언어 #C++언어
- C언어 #C++ #어셈블리어 #열거형 데이터타입 #IT디자이너
- C언어 #포인터 #IT디자이너
- C언어 #자료구조 #C++ #연결리스트 #리스트 #알고리즘 #IT디자이너
- C언어 #포인터 #배열 포인터 #포인터 배열 #함수
- C언어 #C++ #IT디자이너 #함수 #재귀 함수 #스택 #자료구조 #페인팅
- C언어 #IT디자이너 #C++언어
- C언어 #C++ #IT디자이너
- 디버그 #Debug #Release #디버그와 릴리즈 차이 #C언어 #C++언어 #어셈블리어
- C언어 #C++ #파일 입출력 #텍스트파일 #IT디자이너
- C언어 #C++ #자료구조 #알고리즘 #IT디자이너 #버블 정렬 #BubbleSort
- IT디자이너 #C언어 #C++ #속성지정자 #기억클래스 #IT #const #static #register #volatile #extern #auto #s
- C언어 #C++ #어셈블리어 #구조체 #구조체 특징 #IT디자이너
- C언어 #스트림 #버퍼링 #표준 입출력 함수 #C++언어 #IT디자이너
- IT디자이너 #QuickSort #퀵정렬 #C언어 #C++ #자료구조 #알고리즘
- C언어 #C++ #삼각함수 #IT디자이너 #문제풀이 #2진수 #16진수 #비트 #bit #비트연산자
- C언어 #IT디자이너 #포인터 #배열 #포인터와 배열
- IT디자이너 #C언어 #C++ #IT디자이너 #코딩테스트
- 스택 #자료구조 #Stack #IT디자이너 #알고리즘 #C언어 #스택 과제 #C++
- Debug #C언어 #C++ #비쥬얼스튜디오 #Release #IT
- C언어 #C++ #구조체 정렬 #pragma #IT디자이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |