首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将std::数组放置在固定的内存地址上?

是否可以将std::数组放置在固定的内存地址上?
EN

Stack Overflow用户
提问于 2021-10-01 13:52:28
回答 2查看 153关注 0票数 0

对于嵌入式设计,我希望在特定的内存地址上放置一个C++ std::数组,该地址指向硬件和软件共享的缓冲区。这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-01 14:42:13

试试安置新

代码语言:javascript
复制
#include <array>
#include <iostream>

int main()
{
  alignas(double) char buffer[100];
  auto parr = new (buffer) std::array<double, 3> {3.14, 15.161, 12};
  const auto & arr =  *parr; 
  std::cout << (void*) &arr << " " << (void*) buffer << "\n";
  for (auto x: arr)
    std::cout << x << " ";
  std::cout << "\n";
}

它可以给出这样的输出:

代码语言:javascript
复制
0x7ffcdd906770 0x7ffcdd906770
3.14 15.161 12 

需要担心的一件事是,您想要使用的地址是否符合您想要保存在数组中的数据的对齐要求。很可能您将处理chars、floats或ints,因此这个条件应该不会很难执行。

票数 0
EN

Stack Overflow用户

发布于 2021-10-01 14:54:21

对于嵌入式代码,有两个简单的解决方案:

  1. 声明extern int myArray[1234] ;,然后在链接器定义文件中定义myArray (或者更确切地说,定义其损坏的形式)。
  2. 定义宏:#define myArray ((int*)0xC0DEFACE)

第一种解决方案是针对纯粹主义者,第二种是针对实用主义者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69407050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档