问题标签 [static-memory-allocation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1560 浏览

c - C中的静态内存分配

这个程序的输出结果是:

任何人都可以请解释以下内容吗?

  • 为什么地址具有不同的字节,例如。main、recur 和 static_varibale 地址为 6*4=24 字节,堆为 7*4=28 字节,栈为 12*4=48 字节地址。
  • 虽然我为每个 malloc 分配 100 个字节,但 malloc 1 和 malloc 2 地址之间的差异是 0x70 = 112 个字节
  • 为什么 foo 和 stuff 的地址之间存在 0x601050 - 0x601048 = 8 的差异,尽管它们都是 int 并且 int 只需要 4 个字节?
0 投票
2 回答
414 浏览

c - C 中的静态和动态内存地址

上面,literal是存储在静态内存中,alpha是存储在动态内存中。我在一本书中读到,一些编译器使用不同的位数显示这两个地址(我只尝试在 Linux 上使用 gcc,它确实显示了不同的位数)。它取决于编译器,还是操作系统和硬件?

0 投票
4 回答
176 浏览

c++ - 静态和动态分配内存寻址?

我使用静态和动态分配在 C++ 中初始化了一个数组。

我希望 &data 和 &data[0] 返回相同的内存地址,因为它们指向数组的第一个元素的位置。但是,我得到了以下结果:

0x7fffb9f3dd40

0x24c6010

0x7fffb9f3dcf0

0x7fffb9f3dcf0

对于 arr1,这似乎按预期工作。请问有人可以解释一下吗?我错过了什么?

0 投票
1 回答
73 浏览

c++ - 根据 const 整数字段设置数组字段的长度

假设我有一堂课...

假设在实例化时立即设置 size 字段,如何data根据该 size 输入设置长度?

我通常会在std::vector这里使用 a ,但我正在为 Arduino 编写一个库,所以它不会飞,如果可以的话,我会尽量避免外部依赖。

0 投票
2 回答
2593 浏览

c++ - 在一行中创建指向值的指针

我想在一行中创建一个指向值的指针;我想要与此相同的功能:

但是,我想在一行中执行此操作,并且不想使用两个变量。我知道我可以这样做:

但我不想使用动态内存;我想使用静态内存。

有没有一种方法可以在一行中使用一个变量静态地分配一个指向值的指针?

0 投票
3 回答
1389 浏览

c++ - 优化具有大局部变量的频繁调用函数 (C++)

假设有一个函数需要调用数百万次。这个函数执行的算术运算不是那么繁重,所以唯一重要的是分配所有变量的速度。我们还假设变量总是在堆栈上分配。最简单的案例示例:

我知道当函数返回时,它的所有变量都被破坏了,那么
通过将其设为静态或全局来缓存这个变量不是更好吗?优化它的最佳方法是什么?

0 投票
1 回答
51 浏览

c++ - 静态多态性问题

我在一个微控制器上(这意味着我只能分配静态内存)并且我正在尝试使用继承.....

假设我有一个抽象类Image和一个抽象类Font。的实例Font可以返回Image基于char函数中给定的值,如下所示:

现在真正的问题是我不知道该GetImage函数该怎么做。

问题是这样的:在 c++ 中,你必须拥有一个抽象类的成员,你必须将它用作指针。所以我的困境是我有一个Font想要创建一个新的Image然后返回它。

如果它返回一个指向其新创建的指针,Image则您将返回对临时对象的引用:

然后,如果我返回,我会尝试返回一个像这样的实际类型:

那么这种静态内存问题有成语之类的吗?

0 投票
1 回答
48 浏览

c - c中数组的内存分配

数组“arr”的内存应该在编译时分配,但在这种情况下,它从用户(运行时)获取“a”的值并为数组分配相同的大小。请说清楚。

0 投票
1 回答
40 浏览

c++ - 为什么概念存储分配与实际不同?

我有一个令人费解的问题(至少对我来说)

假设我声明了一个整数数组:

从概念上讲,内存中发生的情况是,在编译时,分配了 12 个字节来存储 3 个连续的整数,对吧?(这里有一个插图

根据图示,示例地址

arr[0]1000

arr[1]1004, 并且

arr[2]1008


我的问题是:

arr[0]如果我输出和的地址之间的差异arr[1]

而不是得到4,

我出乎意料地得到1

谁能解释为什么会导致该输出?

PS:在我的电脑上,一个 int 是 4 个字节。

0 投票
2 回答
1378 浏览

c - 内存分配和进程内存使用

我想了解为什么多次调用动态分配的数据使用的内存比直接在代码上指定的内存或通过单次调用分配的内存要多malloc

例子

例如,我在 C 中编写了以下两个代码:

test1.c:int x 分配有malloc

为了简单起见,我没有在这里使用free 。当程序等待交互时,我查看另一个终端中的顶部函数,它向我显示:

test2.c:int x 不是动态分配的

顶部向我展示:

我还做了第三个代码,它的结果与我使用的 test2 相同:

为什么进程的内存使用差异如此之大?那是因为 malloc 请求新的内存页面并且有内存被浪费了吗?还是malloc分配更多内存?

test1 使用3.3%的总内存,而 test2 使用0.5%

环境:

我正在 docker 内的 Centos 5 64 位上执行这些测试。

虚拟环境中的内存: