5

php中的关键字new是否意味着在堆上分配内存?前任。

class person {
    // properties and methods
}

$p1 = new person();



有没有办法像在 c++ 中一样在 PHP 中的堆栈中创建对象?
前任。

class person {
    // properties and methods
}

//inside in main stack
int main() {
person p1;
4

2 回答 2

6

在幕后,当您使用“new”关键字创建对象时,您正在创建一个 zval。用于在核心库和扩展中创建 zval 的宏为 zval 分配内存,所以答案是肯定的,在 PHP 中创建对象会导致创建存储在堆上的对象。事实上,所有类型的 PHP 变量都是幕后的 zval(这便于转换),因此它们实际上都存储在堆上。

如果要将数据存储在堆栈上,最好使用不同的语言。

于 2012-08-27T21:50:38.470 回答
1

答案是肯定的。

此外,您不应该控制 PHP 控制内存的方式。这是 PHP 等高级语言的一部分。请注意,C++ 是一种非常低级的语言(语言本身不考虑不同的操作系统,您必须为不同的操作系统编写不同的代码(您可以使用库,ofc,为您做到这一点))。

于 2012-08-27T21:43:46.010 回答