как найти выделенную память по переменной? - PullRequest
0 голосов
/ 22 ноября 2011
class app {
        public int x = 3; 

        static void Main(string[] args)
        {
        }
}

возможно получить адрес памяти, выделенный переменной x?

пример может быть в C, C++, C# или D. Надеюсь понятно Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Амперсанд (&) является оператором адреса в большинстве языков, подобных C:

int x;
printf("Address of x is %p\n", &x);

Возвращаемое значение & фактически является указателем на его операнд.

4 голосов
/ 22 ноября 2011

В C и C ++ это довольно просто.Я приведу пример на C ++:

struct App
{
   int x;
   App() : x(3) { }
};

int main()
{
  App a;
  int * p = &a.x; // address goes here
}

Нет, конечно, такой вещи, как "переменная App::x", поскольку App - это только тип .Каждый экземпляр этого типа, такой как a в примере, несет свой собственный набор переменных-членов, и указатель на переменную-член легко получить.(То же самое верно и для простых структур данных в C.)

Обратите внимание, что в C ++ есть еще одна связанная функция: указатели на элементы.Это позволяет нам сформировать непрозрачное значение int App::*pm = &App::x, которое само по себе ни на что не указывает, а только содержит информацию о смещении из App::x внутри класса, если хотите.Это животное можно использовать вместе с экземпляром для получения действительного значения, например, a.*pm.

1 голос
/ 22 ноября 2011

Пропуск D и E. C # и F # (и других языков CLR) - нет фиксированных адресов для какой-либо частичной переменной в целом. Можно использовать управляемый отладчик (то есть WinDbg + SOS), чтобы найти адрес какой-либо конкретной переменной, или использовать fixed вместе с классами взаимодействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...