为什么重载new参数必须是size_t类型?

时间:2022-08-08 19:31:57
想重载new操作符实现自己的内存管理功能
void* operator new(unsigned int size,const char* file,long line);
编译报错说必须为size_t类型。。。。

9 个解决方案

#1


我觉得可能是因为机器字长的原因,size_t一般使用long定义的,long在64位系统下为64位整数,在32位系统下,为32位整数,如果限定类型的话,可能会使用上不方便。
以上是推测供参考~

#2


引用 1 楼  的回复:
我觉得可能是因为机器字长的原因,size_t一般使用long定义的,long在64位系统下为64位整数,在32位系统下,为32位整数,如果限定类型的话,可能会使用上不方便。
以上是推测供参考~

我的机子是64位,有这种可能~

#3


size_t的长度 估计是平台无关的

#4


size_t是系统根据具体环境经过重新定义的无符号整形类型,可以确保“足够大”来满足应用需要

#5


size_t就是一个unsigned long

#6


size_t是与平台相关的,32位系统是unsigned int,32位的;64位系统是unsigned __int64或unsigned long long,64位的。这样是为了移植性,保持语义一致性。
另外,long的长度取决于编译器的实现,基本上碰得到的都是32位,包括64位系统。
C++规范中并没有定义char、int和long的长度,只是要求char <= int <= long

#7


size_t经由typedef可以做到平台无关。

#8


VS IDE中,在不明白的符号上点鼠标右键,选转到定义。

C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\crtdefs.h

   479: #ifndef _SIZE_T_DEFINED
   480: #ifdef _WIN64
   481: typedef unsigned __int64    size_t;
   482: #else  /* _WIN64 */
   483: typedef _W64 unsigned int   size_t;
   484: #endif  /* _WIN64 */
   485: #define _SIZE_T_DEFINED
   486: #endif  /* _SIZE_T_DEFINED */

#9


因为这是规定!

你可以挑战权威,但是不能挑战规定!

#1


我觉得可能是因为机器字长的原因,size_t一般使用long定义的,long在64位系统下为64位整数,在32位系统下,为32位整数,如果限定类型的话,可能会使用上不方便。
以上是推测供参考~

#2


引用 1 楼  的回复:
我觉得可能是因为机器字长的原因,size_t一般使用long定义的,long在64位系统下为64位整数,在32位系统下,为32位整数,如果限定类型的话,可能会使用上不方便。
以上是推测供参考~

我的机子是64位,有这种可能~

#3


size_t的长度 估计是平台无关的

#4


size_t是系统根据具体环境经过重新定义的无符号整形类型,可以确保“足够大”来满足应用需要

#5


size_t就是一个unsigned long

#6


size_t是与平台相关的,32位系统是unsigned int,32位的;64位系统是unsigned __int64或unsigned long long,64位的。这样是为了移植性,保持语义一致性。
另外,long的长度取决于编译器的实现,基本上碰得到的都是32位,包括64位系统。
C++规范中并没有定义char、int和long的长度,只是要求char <= int <= long

#7


size_t经由typedef可以做到平台无关。

#8


VS IDE中,在不明白的符号上点鼠标右键,选转到定义。

C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\crtdefs.h

   479: #ifndef _SIZE_T_DEFINED
   480: #ifdef _WIN64
   481: typedef unsigned __int64    size_t;
   482: #else  /* _WIN64 */
   483: typedef _W64 unsigned int   size_t;
   484: #endif  /* _WIN64 */
   485: #define _SIZE_T_DEFINED
   486: #endif  /* _SIZE_T_DEFINED */

#9


因为这是规定!

你可以挑战权威,但是不能挑战规定!