问题标签 [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 投票
1 回答
273 浏览

c - 将 waveOutWrite 与动态分配的内存一起使用

我一直在用 C 来试验声音。

我找到了一段代码,可以让我生成 PCM 波声音并通过声卡输出。

它工作得很好。

这是有效的代码:(您需要链接 winmm 才能正常工作)
(警告:声音很大。)

但是,我想使用类似的方法来解析和播放 .wav 文件。

我已经意识到虽然上面的代码有效(缓冲区是静态分配的)但是,当我动态分配内存(例如使用 malloc)时,没有播放声音输出。我听到很沙哑的嗡嗡声,表示该waveOutWrite()功能已执行,但没有播放其他声音。

这是不起作用的示例:

注意:我听说有一种方法可以“锁定”部分内存,我可以用它来播放动态分配的音频缓冲区。如果是这样,我会怎么做?

我还有一个小烦恼。我发现如果我在没有耳机的情况下启动程序,音频会通过计算机的扬声器播放,这是意料之中的,但是当我插入耳机时,音频仍然会通过计算机的扬声器播放。如果默认播放设备发生更改,我将如何调整代码以便将播放设备切换为默认值?

非常感谢您的宝贵时间!你们这些人真棒。

更新:

我发现 Microsoft 文档使用函数GlobalAlloc()HeapAlloc()LocalAlloc()VirtualAlloc()为波形缓冲区分配内存。下面的代码取自这个例子

这也取自另一个例子

0 投票
1 回答
51 浏览

c - 是否可以通过 C 中已知位置上的指针遍历数组?

我的问题需要一些解释:

首先,让我们考虑一个大小为 n(动态或静态)的一维数组。我们称之为标签。

我们将通过假设数组存储在内存中从地址 0x01 到 (0x01 + n - 1) 来简化。

现在考虑一个称为 p 的指针。还有一个起始索引 i,介于 0 和 n - 1 之间。

然后我们这样做:

p 知道地址 0x0i 的值。(符号不正确,但你明白了)。

我们可以像这样使用 p读取tab[i - 1]tab[i + 1]吗?

或者只是像这样?

并最终这样做?

如果一维阵列可以做到这一点,那么它可以用于多维阵列吗?以及如何在 C 中实现它?

0 投票
1 回答
181 浏览

c - 静态动态内存会在程序结束时自动释放吗?

关键字使static指针保持活动状态直到程序终止,但是当进程终止时分配给指针的内存是否会buffer自动释放?还是程序员必须这样做?


在下面的示例中,我们不知道函数将被调用多少次,并且只有在当前调用函数时没有读取任何内容时,我们才能释放分配的内存。否则内存不能被释放,因为我们将需要在下一次调用中使用我们刚刚读取的字节。


功能


程序

0 投票
2 回答
69 浏览

c++ - 使用函数中的语句数作为内存分配的常数

我有一个执行一堆测试的函数。每当创建一个新测试时,该函数就会多得到一两行。并且 - 结果被推回数组中。所以它是这样的(简化):

我想使用此函数中的语句数来为结果分配空间(中的行bar())。我不能使用动态重新分配的结构,如 anstd::vector或 list 等 - 因为由于硬件限制,我无法分配任何内存。

现在,我可以手动计算行数 - 这会起作用。但是每当我添加另一个测试时,我都必须记住更新神奇的常数。

有没有办法用可用于“魔术”表达式的结果进行计数?

注意:由于我是一个没有尊严的严谨的人,我愿意屈从于使用宏。

0 投票
1 回答
196 浏览

c++ - 为什么使用自定义动态内存分配而不是堆栈中的内存?

背景:我正在做一个项目,客户需要我们使用自定义动态内存分配,而不是从堆栈中分配对象。请注意,有问题的对象在编译期间具有已知的大小,甚至不需要动态分配。这让我想知道,

在哪些情况下,对象的自定义动态内存分配可能比从堆栈中分配对象更好?(在编译期间已知大小)


一个例子。如果Dog是一个类,那么不仅仅是声明Dog puppy;他们希望我们做

custom_alloc我们不知道真正的功能。为了使程序运行,给定的custom_alloc函数将是malloc. 并且custom_free将是一个包装free

我不喜欢这种方法,并且想知道这何时真正有用,或者他们真正试图通过这样做来解决什么。

0 投票
2 回答
146 浏览

c - 初始化指向动态内存的全局指针时出错

我正在编写一个涉及malloc创建全局数组的程序。我试过这个(main()当然是在外面):

在 GCC 编译器中,出现以下错误:

我在 Dev-C++ 上试过这个,但没有这样的错误中断编译。错误是什么意思,为什么它特定于 GCC?

0 投票
1 回答
1268 浏览

memory - 用 Arduino 返回字节数组

我有一个包含bytes信息(有效负载)的数​​组,但我想在两个函数中使用这个数组。我该如何退货?我不知道我是否必须声明它不同或在其他地方。

我的代码:

我想使用 9 个字节的信息,首先我声明它byte payload[9];,然后我开始写它。这很好用,但现在我想将它退回以在其他函数中使用它,但我不能。

0 投票
1 回答
104 浏览

c - C reference static memory from initially allocated array

Im have software requirement not to use dynamic memory, on top of that I trying to make kd-tree with k_dimensions, k=1 (like regular array), k=2 (2 dimensional), and so on.

In my kd_tree.h header, I have a representation of a tree (snippet):

In my kd_tree.c implementation, Im attempt to allocate/reference static memory pre allocated in array for new nodes (snippet):

Im getting crash now. Is this the correct way to reference address of data_points array root->info = &data_points_space[current_number_of_data_points+i];?

Thanks

0 投票
1 回答
143 浏览

c - 在函数中使用存储时使用 malloc 和 char array[i] 的区别

array[size]使用和使用定义在运行时之前定义的长度数组(取决于命令行参数)有什么区别malloc()array[i]导致数据放在堆栈上,malloc()使用堆[见这个stackoverflow]

因此,对于大数据,我可以遇到 stackoverflows,但在新机器上总共 30 chars 和ints 应该没有问题(据此,Windows 上的 Stack 大约为 1MB)。

所以我可能遗漏了一些明显的东西。

据我了解,在 中定义时main(),两者应该相同:

示例 1

示例 2

但是当我在函数内部使用数组并将其作为指针 ( func(char* array)) 或数组 ( funct(char array[])) 传递时,有时 gdb-debugger 会让我知道函数在 #1 中传递了损坏的数据,使用已malloc()修复的问题。

array[i]不是在编译时没有确定就不能用了?这是一些范围问题吗?这个答案有一个评论暗示这样的事情,但我不太明白这是否适用于此。

我正在使用 C99。

0 投票
7 回答
21267 浏览

c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?

我偶然发现了一个涉及不同大小的数组声明的测验。我首先想到的是我需要在new命令中使用动态分配,如下所示:

但是,我看到其中一种解决方案允许以下情况:

经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下需要使用动态分配?还是编译器将其翻译为动态分配?

包括删除功能。但是请注意,这里的问题与内存泄漏无关。