변수(Variable)란?
프로그램 안에서 값을 기억해 두기 위한, 이름이 붙은 그릇. 정수형이나 실수형 등의 형을 선언하여 사용하며, 대입으로 값을 바꿔 쓴다. 새 값을 대입하면 이전 값은 사라진다.
일본어 명칭: 変数
변수(Variable)은(는) 프로그래밍의 기초(의사 코드 트레이스), 링커, 로더, 실행 파일, 멀티코어와 동기화 등 12개 분야의 연습 문제 78개에 나와요.
프로그램 안에서 값을 기억해 두기 위한, 이름이 붙은 그릇. 정수형이나 실수형 등의 형을 선언하여 사용하며, 대입으로 값을 바꿔 쓴다. 새 값을 대입하면 이전 값은 사라진다.
일본어 명칭: 変数
변수(Variable)은(는) 프로그래밍의 기초(의사 코드 트레이스), 링커, 로더, 실행 파일, 멀티코어와 동기화 등 12개 분야의 연습 문제 78개에 나와요.
정답: C. 값이 레지스터 재사용이나 계산의 삭제로 남아 있지 않기 때문
최적화에서는 변수를 메모리에 두지 않고 레지스터만으로 다루다가, 다 쓰고 나면 그 레지스터를 다른 값에 재사용합니다. 상수 전파로 계산 자체가 사라지기도 합니다. 그래서 디버거로 멈춘 시점에는 이미 그 변수의 값이 어디에도 남아 있지 않은 경우가 있으며, "최적화로 삭제됨" 등으로 표시됩니다. 디버깅할 때는 최적화를 약하게 하거나 디버그용 최적화 설정을 사용하는 것이 일반적입니다. 디버거가 읽어 들이지 못하게 되는 것은 아닙니다.
정답: A. .data(초기값이 있는 데이터)
0이 아닌 초기값을 가진 전역 변수나 정적 변수는 .data 섹션에 놓이며, 그 초기값이 파일 안에 저장됩니다. 프로그램을 읽어 들일 때 이 내용이 그대로 메모리에 복사되므로 main이 시작되는 시점에 limit은 100입니다. .data는 실행 중에 바뀔 수 있으므로 읽기와 쓰기가 허용된 영역이 됩니다.
최적화에서는 변수를 메모리에 두지 않고 레지스터만으로 다루다가, 다 쓰고 나면 그 레지스터를 다른 값에 재사용합니다.
최적화를 적용해 컴파일한 프로그램을 디버거로 조사하면 일부 변수의 값이 "표시할 수 없음"으로 나오는 경우…0이 아닌 초기값을 가진 전역 변수나 정적 변수는 .data 섹션에 놓이며, 그 초기값이 파일 안에 저장됩니다.
C 언어에서 파일 바깥에 'int limit = 100;'이라고 쓴 전역 변수는 일반적으로 어느 섹션에 놓…지역 변수는 함수가 호출될 때 스택 프레임 안에 만들어지며(최적화로 레지스터에만 놓이기도 합니다), 함수에서 돌아오면 사라집니다.
C 언어 함수 안에서 선언한, static이 붙지 않은 지역 변수(자동 변수)는 실행 중 어디에 놓입니까?전역 변수나 정적 변수는 .bss에 놓여 프로그램 시작 시 0으로 채워지므로 0에서 시작합니다.
C 언어에서 초기값을 쓰지 않은 지역 변수와 전역 변수의 사용 시작 시 값에 대해 올바른 것은 무엇입니까?volatile은 변수의 읽기와 쓰기를 생략하거나 합치지 않도록 컴파일러에 지시하는 것으로, 원래는 하드웨어 레지스터 조작을 위한 것입니다.
C 언어에서 스레드 간에 주고받는 플래그 변수에 volatile을 붙이는 것만으로는 동기화로 불충분한 이유…스택(Stack) 배열(Array) 인수(Argument) 재귀(Recursion) 포인터(Pointer) 마이컴(마이크로컨트롤러) 반환값(Return Value) 캐시 라인(Cache Line) 링커(linker) volatile(형 한정자)