Они очень разные, хотя они часто используются для реализации пользовательских типов данных (именно это я и предполагаю, что этот вопрос есть).
Как упоминалось в PMg, #define
обрабатывается pre-processor (как операция вырезания и вставки), прежде чем компилятор увидит код, а typedef
интерпретируется компилятором.
Одно из основных отличий (по крайней мере, когда дело доходит до определения типы данных) заключается в том, что typedef
допускает более конкретную проверку типов. Например,
#define defType int
typedef int tdType
defType x;
tdType y;
Здесь компилятор видит переменную x как int, но переменную y как тип данных, называемую «tdType», которая имеет тот же размер, что и int. Если вы написали функцию, которая приняла параметр типа defType, вызывающий может передать нормальный int, и компилятор не узнает разницу. Если вместо этой функции вместо параметра tdType был выбран параметр, то компилятор будет гарантировать, что во время вызовов функции использовалась переменная соответствующего типа.
Кроме того, некоторые отладчики имеют возможность обрабатывать typedef
s, что может быть гораздо более полезным, чем все пользовательские типы, перечисленные как их базовые примитивные типы (как это было бы, если бы #define
использовался вместо этого).
Если Вы не пытаетесь сделать это в самом коде, который я принимаю на основе Вашей ссылки МУРАВЬЕВ, попытайтесь смотреть на CLRProfiler (в настоящее время v2.0). Это свободно и если Вы не возражаете против довольно упрощенного UI, это может предоставить ценную информацию. Это даст Вам всесторонний обзор всех видов статистики. Я использовал его некоторое время назад в качестве одного инструмента для нахождения стебля лука-порея памяти.
Загрузка здесь: http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en
, Если Вы действительно хотите сделать это в коде, CLR имеет профильные API, которые Вы могли использовать. При нахождении информации в CLRProfiler так как это использует те API, необходимо быть в состоянии сделать это в коде также. Больше информации здесь: http://msdn.microsoft.com/de-de/magazine/cc300553 (en-us) .aspx
(Это не столь загадочно как использование WinDbg, но быть готовым сделать могущественный глубоко в CLR.)
Профилировщик CLR , который является, обеспечивает свободный Microsoft, делает очень хорошее задание в этом типе вещи.
введение в целого профилировщика может быть загружено здесь . Также Шаблоны & команды Методов помещают что-то вместе некоторое время назад детализация, как использовать профилировщика.
Это делает довольно разумное задание при показе Вам, различные потоки и объекты создали в тех потоках.
Hope это проливает некоторый свет. Счастливое профилирование!
У меня есть хороший опыт с MemProfiler. Это дает Вам отслеживания стека того, когда объект был создан и все графики того, почему объект все еще не собран "мусор".