问题标签 [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.
c - 将 waveOutWrite 与动态分配的内存一起使用
我一直在用 C 来试验声音。
我找到了一段代码,可以让我生成 PCM 波声音并通过声卡输出。
它工作得很好。
这是有效的代码:(您需要链接 winmm 才能正常工作)
(警告:声音很大。)
但是,我想使用类似的方法来解析和播放 .wav 文件。
我已经意识到虽然上面的代码有效(缓冲区是静态分配的)但是,当我动态分配内存(例如使用 malloc)时,没有播放声音输出。我听到很沙哑的嗡嗡声,表示该waveOutWrite()
功能已执行,但没有播放其他声音。
这是不起作用的示例:
注意:我听说有一种方法可以“锁定”部分内存,我可以用它来播放动态分配的音频缓冲区。如果是这样,我会怎么做?
我还有一个小烦恼。我发现如果我在没有耳机的情况下启动程序,音频会通过计算机的扬声器播放,这是意料之中的,但是当我插入耳机时,音频仍然会通过计算机的扬声器播放。如果默认播放设备发生更改,我将如何调整代码以便将播放设备切换为默认值?
非常感谢您的宝贵时间!你们这些人真棒。
更新:
我发现 Microsoft 文档使用函数GlobalAlloc()
、HeapAlloc()
和LocalAlloc()
来VirtualAlloc()
为波形缓冲区分配内存。下面的代码取自这个例子:
这也取自另一个例子:
c - 是否可以通过 C 中已知位置上的指针遍历数组?
我的问题需要一些解释:
首先,让我们考虑一个大小为 n(动态或静态)的一维数组。我们称之为标签。
我们将通过假设数组存储在内存中从地址 0x01 到 (0x01 + n - 1) 来简化。
现在考虑一个称为 p 的指针。还有一个起始索引 i,介于 0 和 n - 1 之间。
然后我们这样做:
p 知道地址 0x0i 的值。(符号不正确,但你明白了)。
我们可以像这样使用 p读取tab[i - 1]或tab[i + 1]吗?
或者只是像这样?
并最终这样做?
如果一维阵列可以做到这一点,那么它可以用于多维阵列吗?以及如何在 C 中实现它?
c - 静态动态内存会在程序结束时自动释放吗?
关键字使static
指针保持活动状态直到程序终止,但是当进程终止时分配给指针的内存是否会buffer
自动释放?还是程序员必须这样做?
在下面的示例中,我们不知道函数将被调用多少次,并且只有在当前调用函数时没有读取任何内容时,我们才能释放分配的内存。否则内存不能被释放,因为我们将需要在下一次调用中使用我们刚刚读取的字节。
功能:
程序:
c++ - 使用函数中的语句数作为内存分配的常数
我有一个执行一堆测试的函数。每当创建一个新测试时,该函数就会多得到一两行。并且 - 结果被推回数组中。所以它是这样的(简化):
我想使用此函数中的语句数来为结果分配空间(中的行bar()
)。我不能使用动态重新分配的结构,如 anstd::vector
或 list 等 - 因为由于硬件限制,我无法分配任何内存。
现在,我可以手动计算行数 - 这会起作用。但是每当我添加另一个测试时,我都必须记住更新神奇的常数。
有没有办法用可用于“魔术”表达式的结果进行计数?
注意:由于我是一个没有尊严的严谨的人,我愿意屈从于使用宏。
c++ - 为什么使用自定义动态内存分配而不是堆栈中的内存?
背景:我正在做一个项目,客户需要我们使用自定义动态内存分配,而不是从堆栈中分配对象。请注意,有问题的对象在编译期间具有已知的大小,甚至不需要动态分配。这让我想知道,
在哪些情况下,对象的自定义动态内存分配可能比从堆栈中分配对象更好?(在编译期间已知大小)
一个例子。如果Dog
是一个类,那么不仅仅是声明Dog puppy;
他们希望我们做
custom_alloc
我们不知道真正的功能。为了使程序运行,给定的custom_alloc
函数将是malloc
. 并且custom_free
将是一个包装free
我不喜欢这种方法,并且想知道这何时真正有用,或者他们真正试图通过这样做来解决什么。
c - 初始化指向动态内存的全局指针时出错
我正在编写一个涉及malloc
创建全局数组的程序。我试过这个(main()
当然是在外面):
在 GCC 编译器中,出现以下错误:
我在 Dev-C++ 上试过这个,但没有这样的错误中断编译。错误是什么意思,为什么它特定于 GCC?
memory - 用 Arduino 返回字节数组
我有一个包含bytes
信息(有效负载)的数组,但我想在两个函数中使用这个数组。我该如何退货?我不知道我是否必须声明它不同或在其他地方。
我的代码:
我想使用 9 个字节的信息,首先我声明它byte payload[9];
,然后我开始写它。这很好用,但现在我想将它退回以在其他函数中使用它,但我不能。
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
c - 在函数中使用存储时使用 malloc 和 char array[i] 的区别
array[size]
使用和使用定义在运行时之前定义的长度数组(取决于命令行参数)有什么区别malloc()
?array[i]
导致数据放在堆栈上,malloc()
使用堆[见这个stackoverflow]
因此,对于大数据,我可以遇到 stackoverflows,但在新机器上总共 30 char
s 和int
s 应该没有问题(据此,Windows 上的 Stack 大约为 1MB)。
所以我可能遗漏了一些明显的东西。
据我了解,在 中定义时main()
,两者应该相同:
示例 1
示例 2
但是当我在函数内部使用数组并将其作为指针 ( func(char* array)
) 或数组 ( funct(char array[])
) 传递时,有时 gdb-debugger 会让我知道函数在 #1 中传递了损坏的数据,使用已malloc()
修复的问题。
是array[i]
不是在编译时没有确定就不能用了?这是一些范围问题吗?这个答案有一个评论暗示这样的事情,但我不太明白这是否适用于此。
我正在使用 C99。
c++ - 'new' 和 'delete' 在 C++ 中被弃用了吗?
我偶然发现了一个涉及不同大小的数组声明的测验。我首先想到的是我需要在new
命令中使用动态分配,如下所示:
但是,我看到其中一种解决方案允许以下情况:
经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下需要使用动态分配?还是编译器将其翻译为动态分配?
包括删除功能。但是请注意,这里的问题与内存泄漏无关。