我正在尝试对地址进行算术运算。我需要确保它在4字节字边界上。这要求我获取指针的无符号整数表示形式以执行一些数学运算。我已经做到了:
//memStartAddr is of type void* (from an external API function)
data32 tempAddr = reinterpret_cast<data32>(memStartAddr);
//adjust pointer to the next word boundary if needed
tempAddr = wordAlign(tempAddr);
//memStartAddress is a class variable of type unsigned char*
memStartAddress = reinterpret_cast<data8*>(tempAddr);
//calculate bytes lost due to above adjustment
data32 delta = (tempAddr - reinterpret_cast<data32>(memStartAddress));
//Take advantage of integer arithmetic to ensure usable size is a multiple
//of 4 bytes. Remainders are lost. Shrinks usable size if necessary.
memSize = ((size - delta) / 4) * 4;
所有这些在我的测试中都有效,但是,使用reinterpret_cast被认为是禁止的做法。还有另一种方法吗?还是这里有异常(exception)规定?
最佳答案
您正在寻找memStartAddress = std::align(4, objSize, memStartAddr, objSize+3);
。标准功能比您需要的灵活一些,因此您需要告诉它最多要+3更改地址。
关于c++ - 在C++中对空指针执行算术运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19801734/