Ich möchte die Speicherausrichtung eines Typs T
überprüfen. Der direkte Weg dazu ist
jedoch ist uintptr_t
nicht Teil des existierenden C ++ - Standards und wird von einigen Compilern nicht unterstützt. Daher suche ich nach einer portablen alternativen Möglichkeit, dies zu tun, und std::ptrdiff_t
sieht für mich gut aus. std::ptrdiff_t
garantiert in der Lage zu sein, die Differenz zwischen zwei Zeigern zu speichern, aber wer sagt, dass einer dieser Zeiger nicht Null-Zeiger sein kann? In diesem Fall muss std::ptrdiff_t
mindestens so groß sein wie der Zeiger selbst.
oder so (um die Multiplikation mit sizeof(T)
loszuwerden)
Was halten Sie von einer solchen Lösung? Ist es tragbar genug? Ich sehe keine Gründe, warum dies scheitern sollte, möchte ich jedoch bestätigen.
Danke.
Ich bin nicht sicher, was die Frage hier ist. "Was denken Sie?" Ich denke, dass ptrdiff_t tatsächlich der richtige Datentyp ist, um den Unterschied zwischen zwei Zeigern darzustellen, aber es macht wenig Sinn, zwei Zeiger zu vergleichen, wenn sie nicht in einen Block aus zusammenhängendem Speicher zeigen, der aus einer einfachen Zuweisung stammt (und folglich auch nicht von den zwei verglichenen Zeigern sollte jemals NULL sein).
Tags und Links memory visual-c++ alignment pointer-arithmetic