- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在考虑使用 mbed 的 MemoryPool API,但是它似乎面向简单的 POD 类型。
检查 MemoryPool.h 的来源似乎表明它只是获取内存块并按原样呈现(或者如果使用 calloc 则将 block 归零)而不是进行新的放置。我试图遵循实现,但在系统调用/弱链接迷宫中有点迷失了方向。
我的问题:这个 MemoryPool 实现是否可用于重要的 C++ 类?也就是说,如果我提出分配请求,是否会调用对象构造函数?或者我是否需要创建一个适配的 MemoryPool 来执行放置新操作(以及相应的析构函数调用)以获得正确初始化和构造的对象?
我在 Github 上开了一个问题 - https://github.com/ARMmbed/mbed-os/issues/5891
到目前为止所报道的内容强化了@Pharap 在他们的回答中所说的内容。
最佳答案
if I make an allocation request, will the object constructor be called?
好像不是。
虽然我找不到 osMemoryPoolAlloc
函数的源代码,但还有一些其他的赠品。
首先,正如您提到的,调用 memset(item, 0, sizeof(T));
就像代码在 calloc
中所做的那样确实违反了安全构造和销毁。
其次,osMemoryPoolAlloc
的结果被转换为 (T*)
意味着它返回一个 void *
并且知道除了它的大小之外,与它分配内存的类型无关。
do I need to create an adapted MemoryPool to perform placement new operations (and the corresponding destructor calls) in order to obtain properly initialized and constructed objects?
是的,你会的。
但正如@Daniel Langr 提到的,可能会涉及对齐问题。
对于它的值(value),在代码底部有一条评论说:
/* osMemoryPoolNew 要求池 block 大小是 4 字节的倍数。 */
而且我相信大多数 arm 设备都是 32 位的,所以我认为使用 placement new 来创建对齐为 4 的类型可能是安全的(您可以使用 alignof
进行检查。
但是,我的建议是在 github 页面上提出有关此问题的问题。似乎代码没有足够的文档记录,因此如果不深入了解代码,就很难直接回答你的第二个问题。
(请注意,如果返回的内存适当对齐,那么您可以创建一个遵循 allocator 规则的简单包装器模板类。这将允许与启用分配器的容器一起使用,尽管它们的大小会受到限制结果。)
关于c++ - mbed MemoryPool - 它可用于非平凡类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48335691/
我想在我的 nucleo 开发板上编译并运行一个示例。我能够使用 mbed os api 进行编译和闪存。但是我已经下载了 STM32Cube_FW_F4_V1.16.0 包并想运行其中一个示例。我如
我是 MbedOS 的新手。 我对以下问题感到很困惑。 1. yotta 和 CLI 有什么区别? 2。如何将 MbedOS 移植到我的主板上? 3。 Mbed 2.0 和 3.0 有什么区别? 谢谢
我想在芯片上的SRAM中存储一个简单的整数。 (Cortex M4) 我使用的程序是在线mbed。 我知道SRAM的地址从0x2000 0000开始,芯片具有4KB的所述内存。 我已经阅读了数据手册和
我正在尝试使用 mbed LPC 微 Controller 给吉他调音。下面是项目示例的链接。 https://developer.mbed.org/users/adurand/notebook/gu
我有一个 NXP FRDM-K64F 板,我有一个 uvisor 在盒子里运行不同的模块。有没有办法从外部文件加载一个盒子的代码? uvisor 可以动态处理盒子吗?我想创建一个可以获取二进制文件并将
有没有办法在 mbed board 上使用智能指针? ,连同 mbed 库?需要什么编译器? 最佳答案 根据该网站,他们将编译器作为在线平台提供。我无法访问它,但假设它是启用了 C++ 的 GCC 的
我的目标是将UDP数据包从微控制器(核板)发送到PC-就这么简单。更新:我成功达到了目标。我将在这里解释我是如何做到的,以及我最初偶然发现的问题。非常感谢StackOverflow社区以及Linked
我的结构定义如下: struct localframevelo { double ivelo; //i(x) component of velocity double cvelo; /
我编写了以下基于 MBED 的 C++ 程序作为我正在为我的 Nucleoboard 微 Controller 进行的更详细项目的实验: #include "mbed.h" DigitalOut gr
我正在考虑使用 mbed 的 MemoryPool API,但是它似乎面向简单的 POD 类型。 检查 MemoryPool.h 的来源似乎表明它只是获取内存块并按原样呈现(或者如果使用 calloc
如何在不使用 minicom 或 teraterm 等终端仿真器的情况下使用 C 语言与 mbed LPC1768 进行通信? 例如,如果我从 C 代码发送一个整数,那么 LED 应该打开。 我该怎么
我有一 block NXP FRDM-K64F 板,我想设置以太网示例,但我无法让它工作。这就是我的代码在设置静态 IP 地址后的样子。 #include "mbed.h" #include "mai
我使用 mbed-cli 工具下载了 mbed-os 的新拷贝。 $ mbed new mbed-os-test [mbed] Creating new program "mbed-os-test"
我一直在尝试为我的 STM32 Nucleo F303K8 编译 USB 键盘的简单示例(我一直在关注 https://os.mbed.com/handbook/USBKeyboard 和 https
我是用mbed的在线编译器编程的,但现在我需要调试支持,昨晚我导出到uVision 4。不过我编译官方库时似乎有错误。 mbed/KL25Z/gpio_object.h(33): 警告:#260-D:
这是我的代码 C/C++ 代码,用于将字符写入文件。 #include "mbed.h" Serial pc(USBTX, USBRX); char c; char *cha = &c; int ma
在将 mbedtls 移植到没有线程上下文(但使用 TCP/IP)的操作系统时,您是否需要线程上下文(例如阻塞 I/O - 有或没有超时)? 我的操作系统不提供线程上下文。我可以创建网络端点,并在数据
我正在编写一个用于 mbed 5 的外部库(组件 Controller ),并计划在 mbed 存储库中提供它。我想编写测试来确认我的代码是否正常工作,但它们只是常规的普通单元测试,不需要在嵌入式 C
我正在做一个关于STM32F767ZI的项目。当我编译代码时出现的错误是“您的目标不支持以太网接口(interface)库”。我在google上研究了一下,找到了某人的F7_Ethernet库,但由于
我正在尝试使用 MBED TLS 加密函数来解开已使用我拥有的对称 key 使用 AES-128 key 包装进行加密的 key 。 我是加密新手,我的理解是 key 包装/解开与加密/解密不同。这是
我是一名优秀的程序员,十分优秀!