【问题标题】:Are PHP Arrays Consecutive Pieces of Memory?PHP 数组是连续的内存块吗?
【发布时间】:2012-07-09 06:49:06
【问题描述】:

这是一个Java数组:

int[] myArray = new int[3];
myArray[0] = 0;
myArray[1] = 1;
myArray[2] = 2;

第一行立即保留 3 个连续的内存块。创建第四个元素实际上需要使用 int[4] 创建一个新数组,然后将索引 0 到 2 的值传输到新数组中。如:

int[] mySecondArray = new int[4];
for (int i = 0; i < myArray.length; i += 1) {
    mySecondArray[i] = myArray[i];
}
mySecondArray[3] = 3;

但是在 PHP 中,我们可以声明一个数组,然后简单地添加另一个元素,而无需像 Java 那样大惊小怪。

$my_array = array(0, 1, 2);
$my_array[] = 4;

在将附加元素推入现有数组后,PHP 是否真的负责创建新数组?还是 PHP 数组实际上与 C 和 Java 等语言中的数组不同(在内存方面)?我有点担心,因为我看到很多 PHP 代码遍历一个循环并将 50 多个新元素附加到现有数组中,这在 Java 中是完全可笑的。

【问题讨论】:

  • 你有内存问题吗?
  • 我不知道具体细节,但我确信 PHP 的创建者会尽可能有效地处理这个问题。 PHP 数组包含比传统数组更广泛的数据结构。这样的结构在 C 和 Java 中肯定存在(想到ArrayList)。
  • @Dagon 我只是一名实习生,但我在我工作的团队中的开发人员争论 PHP 中哪个更快:10,000 个变量赋值或 10,000 个 PHP 数组赋值。当他们进行讨论时,我想到了这个问题。
  • 工作参数超出了堆栈溢出的范围。
  • @Dagon 你错了。这不在堆栈溢出的范围之内。我问了一个关于编程的合理问题,它可以帮助那些想知道内存如何与 PHP 一起工作的人。

标签: java php arrays memory


【解决方案1】:

或者说 PHP 数组实际上与 C 和 Java 等语言中的数组不同(就内存而言)?

在 PHP 中,数组实际上是哈希表。但是,内存管理几乎没有可比性,因为它们是两种完全不同的语言。

【讨论】:

  • 我在评论你最初的帖子时忘记了它读到了什么。但我基本上认为你说 PHP 数组就像 Java 或 C 数组。我可能误解了,原来的帖子早已不复存在,所以没关系
  • @Esailija 再次添加了原始报价。它应该读作“是的,它 像 C 和 Java 中的数组”。看来,我们说的是同一个。
猜你喜欢
  • 2014-09-26
  • 2011-05-02
  • 1970-01-01
  • 2011-12-10
  • 2011-07-02
  • 2022-01-06
  • 2010-10-12
相关资源
最近更新 更多