Ich meine, von dem, was ich verstehe, wird ein int (Int32) von -2.147.483.648 zu 2.147.483.647 gehen. Wenn ich mich richtig erinnere, wird sich jedes Programm unter Windows auf 32Bits so verhalten, wie es 2GB RAM hat, also würde ich sagen, dass ich jede Adresse "innerhalb" eines int32 setzen kann. Ist das wahr? Oder sollte ich bei Uint bleiben? Ich weiß, dass Uint nur für positive ganze Zahlen ist, und dass alle Speicheradressen positive ganze Zahlen sind, aber meine Frage bezieht sich mehr auf "passt jede Speicheradresse in ein int32?".Wenn Sie mit dem Speicher des Prozesses arbeiten, gibt es einen Grund, uint statt int zu verwenden?
Dank
edit: von MSDN i Readprocessmemory sehen (http://msdn.microsoft.com/en-us/library/ms680553(VS.85).aspx) akzeptiert ein size_t Argument für die Basisadresse. Was bildet ein size_t in .net ab?
edit2: Ok, jetzt bin ich irgendwie verwirrt. Scheint, dass ich 100% sicher sein sollte, sollte ich statt der Ints verwenden. Wenn ich also interop benutze, sollte ich UIntPtrs anstelle von IntPtrs verwenden. Aber ich sehe überall Leute, die IntPtrs benutzen. Warum das? Muss es sein, dass all die Dinge, die wir normalerweise verwenden, in den ersten 2 GB des Speichers sind, also gibt es kein Problem bei der Verwendung von Standard-Ints?
Diese beantwortet Ihre Frage zu size_t http://stackoverflow.com/questions/772531/net-equivalent-of-sizet – DmitryK
nicht zu viel in die „Int“ Teil lesen Sie „IntPtr.“ Es ist ein Hinweis, kein Versprechen eines Implementierungsdetails. IntPtr verarbeitet das, was Sie wollen, in einer Bissen-unabhängigen Weise. –
Ich benutzte Reflektor, um in die Implementierung von IntPtr zu schauen. Obwohl es nicht so aussieht, als wäre es darauf beschränkt, int und int zu halten, werden alle ToString(), ToInt32() und sogar ToInt64() intern zuerst den internen Wert in int umwandeln und erst danach in to string und lang jeweils. So scheint IntPtr tatsächlich NUR für Ints zu sein, während UIntPtr in der Tat zu uints ist! –