【发布时间】:2009-07-03 10:29:04
【问题描述】:
最近,我在最近的一次采访中遇到了一个字符串操作问题,并被要求优化性能。我不得不使用迭代器在 TCHAR 字符之间来回移动(支持 UNICODE - 每个 2 字节)。
没有真正考虑数组长度,我犯了一个错误,没有使用 size_t 而是使用 int 进行迭代。我了解它不合规且不安全。
int i, size = _tcslen(str);
for(i=0; i<size; i++){
// code here
}
但是,我们可以分配的最大内存是有限的。如果 int 和寄存器大小之间存在关系,则使用整数可能是安全的。
例如:没有任何虚拟映射工具,我们只能映射 2^register-size 个字节。由于 TCHAR 的长度为 2 个字节,因此是该数字的一半。对于任何将 int 作为 32 位的系统,即使您不使用 int 的无符号版本,这也不会成为问题。有嵌入式背景的人曾经认为 int 是 16 位的,但是在这样的设备上内存大小会受到限制。所以我想知道整数和寄存器大小之间是否存在架构微调决定。
【问题讨论】:
-
读起来更像是一篇博文,而不是一个问题。
-
抱歉,我必须提供更多信息才能得到回复。简单地询问整数/寄存器大小并没有同样的意义。
-
burcu- 你能解释一下,使用 int 是如何不安全的。你的意思是说这里可能会导致溢出吗?
-
不,询问整数和寄存器大小之间是否存在关系将是一个非常清楚的问题。通过将其隐藏在背景中,我实际上必须阅读两遍以确保这实际上是您所要求的。
-
Vivek,是的,我指的是溢出。我试着编辑了一下,但还是很长。
标签: c++ memory integer cpu cpu-registers