어떻게 내가이 메모리 주소로 변환 할 수 있습니다?
숫자는 이미 메모리 주소를 나타내고 번역은 필요하지 않습니다.
어떻게 주소를 사용할 수 있습니까? & 값을 수정 하시겠습니까?
임베디드 시스템 분야에서는 포인터를 가져 와서 포인터에 할당합니다. 16 비트 레지스터 또는 메모리 주소에 액세스하려는 경우 uint16_t
포인터를 값에 할당합니다.
uint16_t * memory_pointer = (uint16_t *) 0x40000000;
그것은 프로세스가 사용하는 모든 메모리 주소를 인쇄 할 수있어?
운영 체제 문제입니다. 일부 운영 체제는 한 프로그램이 다른 프로세스의 메모리 영역에 액세스하지 못하도록 막으려합니다. "다른 프로세스"는 프로세스가 실행될 때 디스크로 스왑 될 수 있으며 프로세스가 수행하는 것과 동일한 메모리 영역을 사용합니다. 따라서 이것이 가능한지 여부는 플랫폼의 운영 체제에 따라 다릅니다.
주소로 표시된 값을 가져올 수 있습니까?
운영 체제 및 플랫폼에 따라 다릅니다. 일부 플랫폼은 특정 주소에 메모리가 있으며 해당 범위를 벗어나는 주소에 액세스하면 의 동작이 정의되지 않음입니다.
일부 운영 체제는 프로세스 외부의 메모리 (예 : 커널의 메모리)에 대한 액세스를 차단합니다. 이 경우 메모리에 액세스 한 결과는 운영 체제에 따라 다릅니다.
메모리에 액세스하는 방법은 포인터를 역 참조하는 것입니다. C++에서 바이트 액세스의 경우 uint8_t
에 대한 포인터를 사용합니다.
"이제 메모리 주소가 10 진수가 아닌 16 진수로 작동한다는 것을 알고 있습니다."- 사실이 아니며 간신히 이해할 수 있습니다. – immibis
숫자를 나타내는 데 사용되는 밑수는 해당 숫자의 값과 관련이 없습니다. 0x10 16 및 이진수 10000은 동일한 값입니다. –
이미 메모리 주소입니다. 표기법은'0x400000'입니다. 이 주소를 수정하기 위해서 당신은'5 ++'와 같이 상수를 쓸 수 없다. 그 안의 값을 출력하려면 역 참조 연산자'*'를 사용하십시오. : cout << * ptrToAddr; – Raindrop7