当前位置: 首页 > news >正文

手机网站建设要素/移动端关键词排名优化

手机网站建设要素,移动端关键词排名优化,软件定制化开发公司,网站建设的关键技术字符指针和字符数组有一个小的区别:字符指针是一个指针变量,他是要占用空间的,这个空间的大小取决于机器是多少位的(64位的就要占用8个字节,因为他是地址,64位系统的地址是用64位来表示的)字符数…

字符指针和字符数组有一个小的区别:

字符指针是一个指针变量,他是要占用空间的,这个空间的大小取决于机器是多少位的(64位的就要占用8个字节,因为他是地址,64位系统的地址是用64位来表示的

字符数组虽然在使用上类似上像是在使用字符指针,然而实际上,本质上他只不过是编译器在内存中做的标记,字符数组本身不占用任何空间。

 

所以,下面的struct在64位机器上的大小是16个字节。

struct test{
    int32_t a;
    
char* buff;
    
char buf[];
}; 

 

int32_t a; 应当使用4个字节,但是64位机器要做64位对其,所以占用了8个字节

char* buff; buff是一个指针,又占用一个64为的地址空间,再加8个字节

char buf[]; 这个东西一个空间也不占用,他就像是一个隐形的字符指针

 

这一点在redis的

Simple Dynamic Strings中得到了出色的应用,参考:http://redis.io/topics/internals-sds

 

修改了的代码可以看到效果: 

#include <stdio.h>
#include 
<iostream>

using namespace std;

typedef 
char *sds;
struct sdshdr {
    
long len;
    
long free;
    
char buf[];
};

sds sdsnewlen(
const void *init, size_t initlen) {
    
struct sdshdr *sh;

    sh 
= (sdshdr*)malloc(sizeof(struct sdshdr)+initlen+1);
    
if (sh == NULL) return NULL;
    sh
->len = initlen;
    sh
->free = 0;
    
if (initlen) {
        
if (init) memcpy(sh->buf, init, initlen);
        
else memset(sh->buf,0,initlen);
    }   
    sh
->buf[initlen] = '\0';

    printf(
"addr of len : 0x%X\n",&sh->len);
    printf(
"addr of free: 0x%X\n",&sh->free);
    printf(
"addr of buf : 0x%X\n",&sh->buf);
    printf(
"addr of sh  : 0x%X\n",sh);
    
return (char*)sh->buf;
}
size_t sdslen(
const sds s) {
    printf(
"addr of s   : 0x%X\n",s);
    
struct sdshdr *sh = (sdshdr*) (s-(sizeof(struct sdshdr)));
    printf(
"addr of sh  : 0x%X\n",sh);
    
return sh->len;
}
main()
{
    sds str 
= sdsnewlen("redis"5);
    cout
<<"-----------------------"<<endl;
    cout
<<(sdslen(str))<<endl;;
}

以上代码的输出是: 

addr of len : 0xE8D3010
addr of free: 
0xE8D3018
addr of buf : 
0xE8D3020
addr of sh  : 
0xE8D3010
-----------------------
addr of s   : 
0xE8D3020
addr of sh  : 
0xE8D3010
5

在这个sdshdr中,buf就好像是一个隐藏的指针,他不参与大小的运算(其实根本没有给他分配内存空间),但是却保存着sds最重要的数据内容。

相关的描述也可以在下面的文章中看到:

http://www.cnblogs.com/welkinwalker/archive/2011/01/05/1926203.html 


 

 

转载于:https://www.cnblogs.com/welkinwalker/archive/2011/09/06/2168571.html

http://www.jmfq.cn/news/5129749.html

相关文章:

  • 仙桃做网站的个人/网站宣传文案范例
  • 查询网站建设/宁波seo基础入门
  • 设计师网站都有哪些/清远网站seo
  • 天津网站策划/安卓优化大师最新版
  • 求职网站建设/南宁seo渠道哪家好
  • 创建网站的过程/seo关键词优化排名外包
  • 代办公司是什么意思/四川网站seo
  • 北京建设职工大学网站/网络热词2022流行语及解释
  • wordpress网站漏洞/软文如何推广
  • 做网站底部不显示中文怎么回事/宣传推广渠道有哪些
  • 如何看出一个网站有做seo/南京百度搜索优化
  • 网站开发设计论文/宁波seo软件免费课程
  • 萝卜建站下载/免费sem工具
  • 多种郑州网站建设/seo网站排名优化服务
  • 十度公司做网站怎么样/网站提交链接入口
  • 网站开发项目培训/手游推广渠道
  • 做网站视频下载/搜索引擎营销案例分析
  • 网站建设自己在家接单/李江seo
  • 网站怎么做才被收录快/模板建站网页
  • 设计网站首页1/百度seo白皮书
  • 鹿邑网站建设/手机推广平台有哪些
  • 南京网站设计案例/管理培训
  • 运城微信网站建设/百度识图在线网页版
  • 手机上怎么做网站/优化营商环境的措施建议
  • 流水线 东莞网站建设/百度网站打不开
  • 网站开发后台前端数据库/赣州seo排名
  • 电商网站开发商/广州网站排名优化报价
  • 网站建设 广西/互联网营销工具
  • 网上保险平台有哪些靠谱/长沙网站优化推广方案
  • 怎样宣传网站/软文推广300字