C린이들이 많이 착각들 하는게 포인터 문법이 난해하다고 포인터가 어렵다고 생각하는거다
C언어 경력자도 포인터 꼬아논 문제 보면 틀리는데, 그건 쓰라고 만든게 아니라 쓰면 안되는 코드를 문제로 내니깐 틀리는 거임.
자매품으로 연산자 우선순위 문제가 있음. 실전에서는 햇갈리면 무조건 괄호치는게 정석임.
어쨋든 포인터 문법 난해한건 다들 인정하고 그걸 해결할려고 C++에서 노력 많이 했음. 포인터 따위 상관없을 정도로 아주 괴물새끼긴 한데 아무튼,
C언어는 다중 포인터로 도배 할수밖에 없다면 define이나 함수등으로 최대한 래핑해서 짜고, 왠만하면 struct로 감쌈.
C언어로 짠 코드보면 강박적으로 assert 도배된 코드가 한두개가 아닌데 포인터 도배하기 시작했을때 프로그램 터지는건 디폴트 옵션이기 떄문이지.
그만큼 숙련자도 문법적 실수가 많다는 거고,
아무튼 포인터가 어려운 이유는, 메모리를 다루는거고 메모리는 컴퓨터 3대 구성요소 '한축'을 담당하는데 메모리를 학습 할려니까 어려운거임.
메모리 보호개념 그러니까 할당,해제,예약,매핑 등등 그리고 페이징, 세그멘테이션, 캐싱, 메모리 계층구조, 가상 메모리, 메모리풀 등등
세부적으로 들어가면 끝도 없는 개념들이 튀어 나오고 거기에 추상화도 많이 되어있어서 공부할 양도 많음. 물론 CS지식으로 분류 되긴함.
근데 사실상 C언어로밖에 접근 못하는게 현실임.
거기에 다중 스레드나 다중 프로세스로 접근이 필요로 할때, 메모리 관리를 C언어에서 어떻게 해야될지가 가장 실제로 많이들 어려워 하는 부분임.
포인터에서 메모리 개념 물어보면 보통 애들은 힙,스택 이런걸 말하는데 근본적으로 이건 알고리즘이고, 메모리 관리 계층구조에서는 최상위권에 위치함.
메모리 관리라는 하위 개념을 이해하는게 C언어 포인터(메모리)의 본질이고 다이렉트로 메모리에 접근하는 C언어의 최고 장점인데,
포인터 완벽하게 이해 했다는 친구들한테 그럼 니컴퓨터 2번 슬롯에 있는 램에서 0x123456 주소에 한번 뭐가 들어 있는지 접근 해봐 하면 못함.
꼴랑 내 프로세스 가상메모리 한구석에 접근 하는거 따위로는 포인터의 장점을 알기도 어렵고, C언어 포인터 써야할 의미도 별로 없음
(그정도 접근은 다른 언어들도 다 함)
(C언어 포인터 빨라서 쓴다는 놈은 그냥 창문 열고 뛰어 내리라)
C언어 문법 포인터 개념 자체는 초등학생도 2시간 잡고 알려주면 다 알아 처먹으니 개나소나 아는걸로 잘난척 하는것좀 그만좀 봤으면 좋겠음.
개추
이거 맞다. 포인터 문법을 사람입장에서 헷갈리게 구성한게 문제라고 봄.
맞는 말이긴 한데 "2번 슬롯에 있는 램에서 0x123456 주소에 한번 뭐가 들어 있는지 접근 해봐 하면 못함." 이건 씹 구구절절 계층화 설명해놓고 상큼하게 계층을 씹어버리노ㅋㅋ
내가 C입문 할때 처음든 의문이라 넣어봤음 ㅋㅋ
그럼 해봐 하면 못함 이런 사족은 왜넣노? 내가 너한테 해봐라고 해도 못할꺼면서
램접근하는법좀
잘가다가 램접근에서 쌉소리가 나오긴하지만 다른 내용 공감간다 포인터, 연산자 우선순위를 수능문제마냥 내놓은 책들은 버리자
ㄹㅇ
랩접근 저건 운영체재가 니한테 할당된 램 아니잖아 꺼져 해버리지 않냐? - dc App
달라면 주긴 하는데 포인터로 접근할려면 프로그램 위치가 중요함 운영체제 상단에 위치하면 안됨
포인터가 어려운건 문법이 아니라 댕글링, 와일드 이런거임
하드웨어 램 접근은 뭔 개소리임 갑자기 어케하는데
DMA
Direct Memory Access가 CPU 통하지 않고 외부장치가 메모리에 접근할려고 쓰는건데 그건 갑자기 왜 여기서 나옴?
펌웨어, 커널 작성같은거 말고 물리 주소 직접 접근 할 이유도 없지 않나. - dc App
물리적 주소 접근하는건 언어가 아니라 커널 기능인데ㅇㅅㅇ
이 댓글은 게시물 작성자가 삭제하였습니다.
커널을 C로 만드는거 아님?
cpu는 모래로 만들었으니까 모래에 연산하는 기능이 있는거임?ㅇㅅㅇ
모래는 유리도 도자기도 컴퓨터도 되는 만능 재료임
램 접근해봐 하면 못함 -> 램 접근하려면 어떻게 해야 되냐고 물어보면 그런 생각 자체를 해본 적이 없음 - dc App
포인터가 메모리누수와 온갖 버그들의 원인 c++ 넘어가면서 raii 때문에 많이 나아지긴했는데 아직도 코드길이 길어지면 캐릭터 움직였는데 ui크기가 움직이는 마법을 보게된다 - dc App
오래전글이라 검색하다 보긴했는데 메모리 0x123456에 접근하는방법은 어플리케이션 레벨로는 자기에게 할당된 메모리밖에 접근못하니까 논외고, 관리자 권한을 얻어서 volatile 로 메모리주소 고정선언하고 그 값을 얻어와서 출력하면 되는데 보통은 없는 주소이거나 커널영역의 엑세스는 MMU에서 차단하니까 엑세스 못할 가능성이 99%