具有内联程序集的C数组声明



我最近发现了这个片段:

extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start");
//                                                ^^^^^^^^^^^^^ what's going on here?

在esp-idf示例中(第74行(。我无法理解这份声明,我的在线搜索也没有成功。我最好的猜测是这个代码:

  • 使用uint8_t替换char,因为它们具有相同的大小(1字节(。不知道为什么尽管

  • 通过从字符串长度推断数组大小,最终声明一个字符串(const char数组(,该字符串的长度已在我们的模块之外指定

即使我的假设是正确的,我也不明白为什么是这样写的,或者在这种情况下"空终止"会发生什么。所以实际的问题是:

  • 这个代码在做什么
  • 它为什么这样做(优势(
  • 它与简单的C风格声明有什么区别吗

这取决于编译器。然而,我的猜测是,这段代码声明了一个名为server_root_cert_pem_start的数组,并将其绑定到可能在其他地方(在汇编文件中?(定义的另一个符号(内存位置(_binary_server_root_cert _pem_start

相关内容

  • 没有找到相关文章

最新更新