好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

phpint64位的简单介绍

很多站长朋友们都不太清楚phpint64位,今天小编就来给大家整理phpint64位,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 php7相对于php5有哪些变动,举例 2、 PHP最大整数是多少 3、 php 整型占几个字节 4、 PHP 数组下标负数的问题 5、 PHP 如何在64位系统让32位的整型左移溢出 6、 php怎么查看一个变量的占用内存 php7相对于php5有哪些变动,举例

ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG

增加抽象语法树,使编译更加科学

64位的INT支持

统一的变量语法

原声的TLS - 对扩展开发有意义

一致性foreach循环的改进

新增 <=>、**、?? 、\u{xxxx}操作符

增加了返回类型的声明

增加了标量类型的声明

核心错误可以通过异常捕获了

增加了上下文敏感的词法分析

PHP最大整数是多少

32位平台:2147483647 7fffffff,大约20亿;64位平台:大约9E18。PHP 不支持无符号整数

php 整型占几个字节

据官方资料:

整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。 PHP 不支持无符号整数。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示。

PHP 数组下标负数的问题

这是因为win下是32bit的环境,Linux用的是64位环境。

-2在32bit下的数据为0xFFFF FFFE

-2在64bit下的数据为0xFFFF FFFF FFFF FFFE

而你那未经考虑就直接在64bit下可会导致

得到0x0000 0000 FFFF FFFE得值4294967294

解决办法:根据-2的“产生算法”或“数据来源”作出修改或应对

比如加入

if(PHP_INT_SIZE===4){

//在32bit系统下怎么处理-2

}else{

//在64bit系统下怎么处理-2

}

PHP 如何在64位系统让32位的整型左移溢出

可以在64bit系统上把补码处理一下

×手上没装64bit的php所以用Java的64bit的long模拟

public class Test {

    public static void main(String[] args) {

      int a=83661<<15;

      System.out.println("32bit:"+a);      

      long n=83661L<<15;

      System.out.println("64bit:"+n);      

      if(n>0x7fffffffL){

      n--; n=~n; n=0x7fffffffL; n=-n;

      }

      System.out.println("64bit处理后:"+n);

    }

}

32bit:-1553563648

64bit:2741403648

64bit处理后:-1553563648

如不想移植以上的,PHP还可以直接把数值pack()打包成32bit有符号,再按32bit有符号unpack()一次也能得到需要的负数,不过感觉这样效率不如以上直接计算快..

php怎么查看一个变量的占用内存

我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存:

[php] view plain copy print?

<?php

echo memory_get_usage() , '<br>';

$start = memory_get_usage();

$a = Array();

for ($i=0; $i<1000; $i++) {

$a[$i] = $i + $i;

}

$mid = memory_get_usage();

echo memory_get_usage() , '<br>';

for ($i=1000; $i<2000; $i++) {

$a[$i] = $i + $i;

}

$end = memory_get_usage();

echo memory_get_usage() , '<br>';

echo 'argv:', ($mid - $start)/1000 ,'bytes' , '<br>';

echo 'argv:',($end - $mid)/1000 ,'bytes' , '<br>';

输出是:

353352

437848

522024

argv:84.416bytes

argv:84.176bytes

大概了解1000

个元素的整数数组需要占用 82k 内存,平均每个元素占用 84 个字节。而纯 C 中整体只需要 4k(一个整型占用4byte * 1000

)。memory_get_usage() 返回的结果并不是全是被数组占用了,还要包括一些 PHP

运行本身分配的一些结构,可能用内置函数生成的数组更接近真实的空间:

[php] view plain copy print?

<?php

$start = memory_get_usage();

$a = array_fill(0, 10000, 1);

$mid = memory_get_usage(); //10k elements array;

echo 'argv:', ($mid - $start )/10000,'byte' , '<br>';

$b = array_fill(0, 10000, 1);

$end = memory_get_usage(); //10k elements array;

echo 'argv:', ($end - $mid)/10000 ,'byte' , '<br>';

得到:

argv:54.5792byte

argv:54.5784byte

从这个结果来看似乎一个数组元素大约占用了54个字节左右。

首先看一下32位机C语言各种类型占用的字节:

[cpp] view plain copy print?

#include "stdafx.h"

//#include <stdio.h>

int main() {

printf("int:%d\nlong:%d\ndouble:%d\nchar*:%d\nsize_t:%d\n",

sizeof(int), sizeof(long),

sizeof(double), sizeof(char *),

sizeof(size_t));

return 0;

}

int:4

long:4

double:8

har*:4

size_t:4

在PHP中都使用long类型来代表数字,没有使用int类型

大家都明白PHP是一种弱类型的语言,它不会去区分变量的类型,没有int float char *之类的概念。

我们看看php在zend里面存储的变量,PHP中每个变量都有对应的 zval, Zval结构体定义在Zend/zend.h里面,其结构:

[cpp] view plain copy print?

typedef struct _zval_struct zval;

struct _zval_struct {

/* Variable information */

zvalue_value value; /* The value 1 12字节(32位机是12,64位机需要8+4+4=16) */

zend_uint refcount__gc; /* The number of references to this value (for GC) 4字节 */

zend_uchar type; /* The active type 1字节*/

zend_uchar is_ref__gc; /* Whether this value is a reference () 1字节*/

};

PHP使用一种UNION结构来存储变量的值,即zvalue_value 是一个union,UNION变量所占用的内存是由最大

成员数据空间决定。

[cpp] view plain copy print?

typedef union _zvalue_value {

long lval; /* long value */

double dval; /* double value */

struct { /* string value */

char *val;

int len;

} str;

HashTable *ht; /* hash table value */

zend_object_value obj; /*object value */

} zvalue_value;

最大成员数据空间是struct str,指针占*val用4字节,INT占用4字节,共8字节。

struct zval占用的空间为8+4+1+1 = 14字节,

其实呢,在zval中数组,字符串和对象还需要另外的存储结构,数组则是一个 HashTable:

HashTable结构体定义在Zend/zend_hash.h.

[cpp] view plain copy print?

typedef struct _hashtable {

uint nTableSize;//4

uint nTableMask;//4

uint nNumOfElements;//4

ulong nNextFreeElement;//4

Bucket *pInternalPointer; /* Used for element traversal 4*/

Bucket *pListHead;//4

Bucket *pListTail;//4

Bucket **arBuckets;//4

dtor_func_t pDestructor;//4

zend_bool persistent;//1

unsigned char nApplyCount;//1

zend_bool bApplyProtection;//1

#if ZEND_DEBUG

int inconsistent;//4

#endif

} HashTable;

HashTable 结构需要 39 个字节,每个数组元素存储在 Bucket 结构中:

[cpp] view plain copy print?

typedef struct bucket {

ulong h; /* Used for numeric indexing 4字节 */

uint nKeyLength; /* The length of the key (for string keys) 4字节 */

void *pData; /* 4字节*/

void *pDataPtr; /* 4字节*/

struct bucket *pListNext; /* PHP arrays are ordered. This gives the next element in that order4字节*/

struct bucket *pListLast; /* and this gives the previous element 4字节 */

struct bucket *pNext; /* The next element in this (doubly) linked list 4字节*/

struct bucket *pLast; /* The previous element in this (doubly) linked list 4字节*/

char arKey[1]; /* Must be last element 1字节*/

} Bucket;

Bucket

结构需要 33 个字节,键长超过四个字节的部分附加在 Bucket 后面,而元素值很可能是一个 zval 结构,另外每个数组会分配一个由

arBuckets 指向的 Bucket 指针数组, 虽然不能说每增加一个元素就需要一个指针,但是实际情况可能更糟。这么算来一个数组元素就会占用

54 个字节,与上面的估算几乎一样。

一个空数组至少会占用 14(zval) + 39(HashTable) + 33(arBuckets) = 86

个字节,作为一个变量应该在符号表中有个位置,也是一个数组元素,因此一个空数组变量需要 118

个字节来描述和存储。从空间的角度来看,小型数组平均代价较大,当然一个脚本中不会充斥数量很大的小型数组,可以以较小的空间代价来获取编程上的快捷。但如果将数组当作容器来使用就是另一番景象了,实际应用经常会遇到多维数组,而且元素居多。比如10k个元素的一维数组大概消耗540k内存,而10k

x 10 的二维数组理论上只需要 6M 左右的空间,但是按照 memory_get_usage

的结果则两倍于此,[10k,5,2]的三维数组居然消耗了23M,小型数组果然是划不来的。

关于phpint64位的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phpint64位的简单介绍的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167774
更新时间:2023-03-31   阅读:65次

上一篇: php大视频上传 php 上传视频文件

下一篇:php优先级队列 php中优先级最高的运算符是什么

相关资讯

最新资料更新

  • 1.织梦做产品展示怎么去掉图片作为超链接时出现的框框
  • 2.dedecms会员登录积分每天只限增加一次的实现思路及代码
  • 3.织梦Dedecms获取缩略图片原图地址的方法
  • 4.dede织梦文章列表隔行换色的方法
  • 5.dedecms中英文网站之中英文搜索结果实现方法
  • 6.dedecms织梦自定义文件名之用拼音或英文标题的方法
  • 7.完美织梦DeDeCMS 5.6 升级 5.7 SP1版解决方案
  • 8.增加dedecms后台留言管理功能
  • 9.DedeCms开启多站点支持绝对网址后生成RSS错误的修改方法
  • 10.如何获取织梦cms当前栏目的顶级栏目名称
  • 11.DedeCMS Wap.php 绑定域名的解决办法
  • 12.DedeCMS的TAG标签无法保存和自动删除的解决方法
  • 13.dedecms判断二级栏目为空不显示的方法
  • 14.织梦不能上传jpg格式的图片怎么办如何解决
  • 15.Dedecms自定义模型解决会员无法投稿的方法
  • 16.织梦DedeCMS缩略图失真模糊完美解决方法
  • 17.dedecms织梦验证码无法正常显示的3种解决办法
  • 18.dedecms后台登录成功后返回到登录界面的解决方法
  • 19.织梦DEDECMS网站安全攻略之修改data目录名称方法步骤
  • 20.织梦dedecms熊掌号落地页改造教程

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]