strlen 与 sizeof 的区别

简介: strlen 与 sizeof 的区别
void
ngx_time_init(void)
{
    ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1;
    ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1;
    ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1;
    ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1;
    ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - 1;
    ngx_cached_time = &cached_time[0];
    ngx_time_update();
}

阅读nginx中的ngx_time_init发现对于常量字符串的操作是使用sizeof操作然后进行-1操作,可见nginx对于性能的追求与细节的完美。 sizeof是操作符而不是函数,因此可以在编译过程中直接获取,而strlen为函数需要在运行中才能获取。

 

附:sizeof和strlen的区别:


一、sizeof


  sizeof(...)是运算符,在头文件中typedef为unsignedint,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。

  它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

  由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

  具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:

  数组——编译时分配的数组空间大小;

  指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);

  类型——该类型所占的空间大小;

  对象——对象的实际占用空间大小;

  函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。\


二、strlen


  strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。

  它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

目录
相关文章
|
7月前
|
编译器 C语言
sizeof,sizeof与strlen的区别
sizeof,sizeof与strlen的区别
58 0
sizeof,sizeof与strlen的区别
|
6月前
|
C语言
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
|
2月前
|
编译器 C++
sizeof 和 strlen 的区别
`sizeof` 和 `strlen` 是 C 和 C++ 中常用的运算符/函数,功能和用途不同
68 11
|
2月前
|
C语言
深入解析sizeof和strlen的区别与联系
深入解析sizeof和strlen的区别与联系
|
7月前
|
存储 编译器
strlen()和sizeof()的区别
strlen()和sizeof()的区别
52 0
strlen和sizeof详解
strlen和sizeof详解
86 0
|
7月前
strlen与sizeof 的基本用法
strlen与sizeof 的基本用法
46 0
|
7月前
|
Serverless
sizeof和strlen的区别【详解】
sizeof和strlen的区别【详解】
57 0
|
C语言
strlen和sizeof的区别
strlen和sizeof的区别
86 0
strlen与sizeof的区别
strlen与sizeof的区别
77 0