Я пытаюсь отлаживать программу, которую я написал. Согласно отладчику, значение void *
имеет значение 0x804b008. Я хотел бы иметь возможность разыменовать это значение (отбросить его до int *
и получить его значение).Вывод произвольной памяти в C
С этим кодом я получаю ошибку сегментации. (Программа с void *
по-прежнему работает в фоновом режиме BTW - это «приостановлено»)
#include <stdio.h>
int main() {
int* pVal = (int *)0x804b008;
printf("%d", *pVal);
}
Я могу понять, почему в состоянии почтительное любой точки в памяти может быть опасно, так может быть, почему это не работает ,
Спасибо!
Я немного ознакомился с разработкой ОС, поэтому считаю, что я понимаю, о чем вы говорите. Это виртуальная память, расположенная в ОЗУ, только что сопоставленная с другой схемой адресации или чем-то еще? Еще раз спасибо. EDIT: Ответил мой вопрос, прежде чем я даже спросил его! – Tyler
Виртуальная память просто означает, что, насколько вы обеспокоены при написании программы, у вас есть приятное непрерывное пространство памяти. Операционная система обрабатывает всю возможную фрагментацию памяти для вас. –
Спасибо. Я собрал столько же. Меня больше интересовало * как * оно реализовано на уровне ОС. http://en.wikipedia.org/wiki/Virtual_memory#Page_tables похоже, как это делается. Спасибо – Tyler