我有一个熊猫数据框
print(df.head())
Run Code Online (Sandbox Code Playgroud)
Row ID Order ID Order Date ... Quantity Discount Profit
0 1 CA-2013-152156 09/11/2013 ... 2 0.00 41.9136
1 2 CA-2013-152156 09/11/2013 ... 3 0.00 219.5820
2 3 CA-2013-138688 13/06/2013 ... 2 0.00 6.8714
3 4 US-2012-108966 11/10/2012 ... 5 0.45 -383.0310
4 5 US-2012-108966 11/10/2012 ... 2 0.20 2.5164
Run Code Online (Sandbox Code Playgroud)
当我执行这个命令时:
ans = pd.pivot_table(data=df, index=['Segment'], columns=['Region'], values = ['Sales'], aggfunc={'Sales':['sum', 'mean']}, margins=True, dropna=False)
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/dist-packages/pandas/core/reshape/pivot.py", line …Run Code Online (Sandbox Code Playgroud) 它只是分配一个包含 1000000 个整数的数组和另一个整数,并将数组的第一个整数设置为 0
我编译这个使用 gcc -g test.c -o test -fno-stack-protector
显然,它在循环中不断在堆栈上分配 4096 个字节,并且每 4096 个字节与 0“或”,然后一旦达到 3997696 个字节,它就会进一步分配 2184 个字节。然后继续将第 4000000 个字节(从未分配过)设置为 5。
为什么不分配请求的全部 4000004 字节?为什么它在每 4096 个字节“或”一个 0,这是一条无用的指令?
我在这里理解错了吗?
注意:这是用 gcc 9.3 版编译的。gcc 7.4 版不执行循环和“或”每 4096 个字节为 0,但它只分配了 3997696+2184=3999880 个字节,但仍将第 4000000 个字节设置为 5