NTD*_*DLS 2 c++ 64-bit standards
编译64位应用程序时,为什么strlen()返回64位整数?我错过了什么吗?
我理解strlen()返回一个size_t类型,根据定义,这不应该改变,但是......为什么strlen 需要返回一个64位整数?
该函数旨在与字符串一起使用.照这样说:
程序员通常会创建数千兆字节或多字节的字符串吗?如果他们这样做了,他们是否需要更好的方法来确定字符串长度而不是搜索NULL字符?
我认为这很荒谬,事实上,我们可能需要一个带回调的StrLenAsync()函数来处理在40TB字符串中搜索NULL的超长进程.听起来很愚蠢?是的,strlen()返回一个64位整数!
当然,提出的StrLenAsync()函数是一个笑话.
Ste*_*dit 18
看起来,当编译64位目标时,size_t被定义为64位.这是有道理的,因为size_t用于各种对象的大小,而不仅仅是字符串.
在64位应用程序上,绝对可以创建一个5GB的字符串.
该规范并不是为了防止你做愚蠢的事情.
即使不需要,也不值得将strlen的规范改为使用size_t来使返回值4而不是8字节.
这是一个图表,显示了最常见数据模型中一些基本类型的大小:
ILP32 LP64 LLP64 ILP64
char 8 8 8 8
short 16 16 16 16
int 32 32 32 64
long 32 64 32 64
long long 64 64 64 64
pointer 32 64 64 64
size_t 32 64 64 64
Run Code Online (Sandbox Code Playgroud)
32位Windows数据模型是ILP32,64位Windows数据模型是LLP64.
| 归档时间: |
|
| 查看次数: |
3703 次 |
| 最近记录: |