python - python和c中的内存分配

标签 python c

我正在看SO中的一个问题,并查看了问题。

Why id function behaves differently with integer and float?

我尝试在 python 中为 a 和 b 获得相同的 id。但是当我在 c 上尝试同样的方法时,

main()
{
    int a=4,b;
    b=2+2;
    printf("%p\n",&a);
    printf("%p",&b);
}

但这打印了不同的值。为什么不同?

最佳答案

等效的 Python 代码的工作原因在您链接的问题的几个答案中给出 - Python(或者至少是 CPython)恰好缓存了一些小整数值 - 其中有 4 个,因此每个 Python 整数对象等于 4 将是同一个对象,因此具有相同的 id

在 C 中,整数是可变的,因此编译器无法执行这种优化 - 如果您递增 a,您不会期望 b 发生变化 如果 Python整数是可变的,在等效代码中 abid 同样会不同。

在实现层面,int 对 C 的意义与对 Python 的意义不同——即使它们恰好在程序中服务于相同的目的。

关于python - python和c中的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997078/

相关文章:

c - 当我运行它时出现段错误

c - 是否定义了 if(++i)++i 的行为?

python - 在 Python 中决定子进程、多处理和线程?

Python:努力掩盖数据集的一部分

从 C 源代码调用 tftp get 命令

c - 仅使用队列和递归的层次顺序遍历算法

c - 在 Xcode 中为 C 程序寻址

python - 如何从回调中获取信息

python - 实现具有与 `type` 不同签名的元类的正确方法是什么?

python - 如何从 Scrapy 中获取请求的响应?