【发布时间】:2014-02-05 11:04:50
【问题描述】:
在内存使用方面,这些 C++ 方法中哪一个更好?有什么区别吗?
std::string MyClass::read ( std::size_t startRow, std::size_t startCol, std::size_t endRow, std::size_t endCol )
{
std::size_t currentRow = startRow;
std::size_t currentCol = startCol;
while(currentRow < endLine ...)
......
}
return ...
}
或相同:
std::string MyClass::read (BoxPtr boxPointer)
{
std::size_t currentRow = boxPointer->getFirstRow;
std::size_t currentCol = boxPointer->getFirstCol;
while(currentRow < boxPointer->getEndRow ...)
{
......
}
}
显然需要这些:
std::string str = read(boxPointer);
std::string str = read(boxPointer->getFirstRow, boxPointer->getFirstCol ...)
一般来说内存使用或编译时间有什么不同吗?
【问题讨论】:
-
内存使用有问题吗?我会推荐后者,因为它简化了函数签名。
-
没有(动态)内存使用,保持简单,只需传递两个参数 - 因此第一个很好
-
@BenjaminBannier:假设
MyClass::read(const Box&)或MyClass::read(Box)或MyClass::read(Box&&)而OP 使用BoxPtr -
@Ashalynd 正确。使用引用保存循环(对象的复制),而不是
const。 -
@Ashalynd:可以预期对指针的引用与指向指针的指针类似地实现...对于内联代码,它通常会被优化掉,但对于外联 @ 987654329@ 这意味着在指针允许访问行/列计数器本身之前,需要额外的间接读取来获取指针值——这只会降低性能。是否为
const与性能无关。
标签: c++ performance memory methods