草庐IT

c - 只读存储器是如何在 C 中实现的?

我在C中听说过,如果我这样做的话char*s="helloworld".“helloworld”实际上存储在只读内存中。我对只读内存不是很清楚。解释是什么?这是否像编译器的标志,告诉编译器不要写入该部分? 最佳答案 这不是Clanguage的功能。而是编译器/链接器和操作系统协同工作的一个特性。当您编译此类代码时,会发生以下情况:编译器会将字符串放入只读数据段。链接器收集这些只读段中的所有数据并将它们放入一个段中。此段驻留在可执行文件中,并带有“只读”属性标记。现在是操作系统可执行加载程序。它加载可执行文件(或者更准确地说,将其映射

c - 只读存储器是如何在 C 中实现的?

我在C中听说过,如果我这样做的话char*s="helloworld".“helloworld”实际上存储在只读内存中。我对只读内存不是很清楚。解释是什么?这是否像编译器的标志,告诉编译器不要写入该部分? 最佳答案 这不是Clanguage的功能。而是编译器/链接器和操作系统协同工作的一个特性。当您编译此类代码时,会发生以下情况:编译器会将字符串放入只读数据段。链接器收集这些只读段中的所有数据并将它们放入一个段中。此段驻留在可执行文件中,并带有“只读”属性标记。现在是操作系统可执行加载程序。它加载可执行文件(或者更准确地说,将其映射

c++ - 输入迭代器和只读前向迭代器有什么区别?

输入迭代器和只读前向迭代器有什么区别?由于后者是只读的,它们显然不能满足输出迭代器的要求。并且,正因为如此,它们实际上是具有额外保证(如果有的话)的输入迭代器。问题是,有哪些额外的保证?我的猜测是,前向迭代器是多channel的,而输入迭代器不是,对吗? 最佳答案 是的,输入迭代器是一次性迭代器。您只能对它们进行一次迭代,而前向迭代器是多遍的。来自§24.2.3[input.iterators]p2(表格),++r的前置/后置条件列:pre:risdereferenceable.post:risdereferenceableorri

c++ - 输入迭代器和只读前向迭代器有什么区别?

输入迭代器和只读前向迭代器有什么区别?由于后者是只读的,它们显然不能满足输出迭代器的要求。并且,正因为如此,它们实际上是具有额外保证(如果有的话)的输入迭代器。问题是,有哪些额外的保证?我的猜测是,前向迭代器是多channel的,而输入迭代器不是,对吗? 最佳答案 是的,输入迭代器是一次性迭代器。您只能对它们进行一次迭代,而前向迭代器是多遍的。来自§24.2.3[input.iterators]p2(表格),++r的前置/后置条件列:pre:risdereferenceable.post:risdereferenceableorri

c++ - 为什么 "auto const&"不是只读的?

这个问题在这里已经有了答案:Variablesmarkedasconstusingstructuredbindingsarenotconst(1个回答)关闭4年前.#includeintmain(){intxa=1;intya=2;autoconst&[xb,yb]=std::tuple(xa,ya);xb=9;//Shouldn'tthisberead-only?returnxa+ya;}这不仅编译,而且返回11。那么两个问题:为什么当xb被指定为autoconst&时我可以写入?这不应该编译失败吗?为什么我不能用“auto&”替换“autoconst&”并让它编译?Clang(6.

c++ - 为什么 "auto const&"不是只读的?

这个问题在这里已经有了答案:Variablesmarkedasconstusingstructuredbindingsarenotconst(1个回答)关闭4年前.#includeintmain(){intxa=1;intya=2;autoconst&[xb,yb]=std::tuple(xa,ya);xb=9;//Shouldn'tthisberead-only?returnxa+ya;}这不仅编译,而且返回11。那么两个问题:为什么当xb被指定为autoconst&时我可以写入?这不应该编译失败吗?为什么我不能用“auto&”替换“autoconst&”并让它编译?Clang(6.

c++ - const 引用字段作为 C++ 类中的只读属性

在C++类中使用const引用字段作为只读getter好不好?我的意思是,这段代码符合良好的做法吗?classcheck{private:int_x;public:constint&x=_x;voidsetX(intv){_x=v;}};它的工作方式非常类似于C#属性、恕我直言,并且在类使用代码中非常简单和干净:checks;inti;std::cin>>i;s.setX(i);std::cout 最佳答案 dothiscodemeetgoodpractices?并非如此,因为它引入了不必要的复杂性和空间开销。此外,无论访问的值如何

c++ - const 引用字段作为 C++ 类中的只读属性

在C++类中使用const引用字段作为只读getter好不好?我的意思是,这段代码符合良好的做法吗?classcheck{private:int_x;public:constint&x=_x;voidsetX(intv){_x=v;}};它的工作方式非常类似于C#属性、恕我直言,并且在类使用代码中非常简单和干净:checks;inti;std::cin>>i;s.setX(i);std::cout 最佳答案 dothiscodemeetgoodpractices?并非如此,因为它引入了不必要的复杂性和空间开销。此外,无论访问的值如何

c++ - 同时从多个线程访问只读数据是否明智?

我有一个我正在尝试制作多线程的应用程序。每个线程都会访问一大块只读数据。如果多个线程同时访问数据可以吗?我知道如果数据不是只读的,我需要使用互斥锁或其他形式的同步来防止竞争条件。但我想知道是否可以读取数据而不考虑同步。在所有个线程的持续时间内,相关数据不会被修改。该应用程序将在Linux和Windows上运行,并使用C++编写,如果这有什么不同的话。 最佳答案 如果数据在读取它的所有线程的生命周期内都是只读的,那么是的,无需同步即可读取。 关于c++-同时从多个线程访问只读数据是否明智?

c++ - 同时从多个线程访问只读数据是否明智?

我有一个我正在尝试制作多线程的应用程序。每个线程都会访问一大块只读数据。如果多个线程同时访问数据可以吗?我知道如果数据不是只读的,我需要使用互斥锁或其他形式的同步来防止竞争条件。但我想知道是否可以读取数据而不考虑同步。在所有个线程的持续时间内,相关数据不会被修改。该应用程序将在Linux和Windows上运行,并使用C++编写,如果这有什么不同的话。 最佳答案 如果数据在读取它的所有线程的生命周期内都是只读的,那么是的,无需同步即可读取。 关于c++-同时从多个线程访问只读数据是否明智?