在C++中,存储类说明符static从数据区域分配内存."数据区"是什么意思?
我不熟悉术语"数据区",但内存通常分为"代码段"和"数据段".代码驻留在前者中,后者中的数据.我认为这就是这里的含义.
传统上,两者之间没有区别.但是,许多现代操作系统可以禁止在数据段中执行代码(假设CPU支持这种区别).这有时会出现"NX标志"的口号,如"无执行",可以有效地防止某些恶意代码注入的情况.
/编辑:请注意,C++标准没有提到"数据区".
区域名称因平台,编译器和链接器而异.
一般来说,有:
程序文本:可执行代码空间.
常量:不可执行的常量.
stack:堆栈.
bss:广泛用C/C++术语表示"静态"."符号启动块"
数据:未初始化的全局变量
heap:在运行时分配的存储.
在这种情况下,相关文档使用名称"数据区域"来表示传统上称为bss段的内容.
在C术语中,存储类说明符"静态"表示在程序的生命周期中存在的存储器,并且初始化为零或初始化器的值.在示例中:
static int s_value_one; static int s_value_two = 123;
s_value_one的值保证为零,并且s_value_type的值在main()中的第一个语句处为123.如何实现这一点是一个实施问题.