BSS段在c,进展的方式
BSS segment in c, way of progress
我是c编程的新手,我正在努力更好地了解关于c程序内存布局的变量保存位置。
我得到了以下代码:
int addr5;
int addr6;
/*code continues*/
int main (int argc, char** argv){
printf("- &addr5: %pn",&addr5);
printf("- &addr6: %pn",&addr6);
/*code continues*/
现在,当我运行这个代码时,我得到了:
- &addr5:0x804a034
- &addr6:0x804a030
现在,根据我所读到的内容,我发现堆内存从较低的值开始(并随着时间的推移而增长)并且堆栈内存从高值开始(随着时间的推移,还有dec)。
由于我将addr5和addr6保存为未初始化的var,并且在函数勺之外,它们不应该保存在BSS段中吗?如果是这样的话,bss段是不是随着我们的发展而增长,因为它在堆中?
addr6不应该大于addr5吗?
谢谢。
否,.bss
段不在堆中。.bss
段和.data
段是固定大小的段,通常在地址空间中接近堆,但它们与堆明显不同。
不,.bss
段不会增长。在程序执行期间,您在程序中定义的全局变量的数量保持不变。如果加载一个动态库,那么该动态库将有自己的.bss
段,该段将放置在地址空间中的另一个位置。
相关文章:
- 重载方法的方式会在使用临时调用时生成编译器错误
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 将字段(在类中)定义为引用的缺点是什么?
- 如何在 c++98 中通过特定字段在 QList 中查找对象?
- 字段在正向声明中具有不完整的类型
- 我可以在中断中写入向量,然后以安全的方式仅在主线程内读取吗?
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 修复警告"field a is not used"如果字段在配置中未使用的好方法
- 有没有一种透明的方式来在 std 容器中使用unique_ptr
- C++正在写入mongo,字符串字段在聚合管道中不起作用
- 类类型的静态constexpr字段在g++中给出链接时间错误
- 查询中的多个字段在 C++生成器 6 中不起作用
- 该代码段在 Colliru 中编译时带有警告,但在 Ideone 中正常编译.哪一个是正确的
- 如何通过Visual Studio COM包装(或其他方式)在C#中使用C++属性联合
- BSS段在c,进展的方式
- ID 字段在自定义点类中间歇性丢失
- 以嵌套或递归方式(即在处理程序内)调用 asio io_service poll() 或 poll_one() 是否有效
- 为什么我的类字段在构造函数中被销毁
- 这个问题叫什么?如果通过基类型传递结构,则后代类型中的字段在方法中不可用
- 错误:字段在C++中具有不完整的类型