请问,静态(全局变量)和栈变量有什么区别吗
请教,静态(全局变量)和栈变量有什么区别吗?
请教,静态(全局变量)和栈变量有什么区别吗?
内存里,静态区/全局区有多大?
谢谢
------解决思路----------------------
你问的这些术语没听说过。而且也和C语言无关。
------解决思路----------------------
静态变量和栈变量的生命周期不同,一个是永生的一个是临时的;他们在内存中的位置不同,一个在静态变量 区,一个是函数执行时调整栈大小来容纳栈变量。静态变量那个区域多大我也没研究过,不懂
------解决思路----------------------
静态区/全局区大小是编译/链接时确定的,你有多少东西, 它就多大, 超过平台限制就不能编译或者运行,
------解决思路----------------------
全局变量理论上大小是不受限制的,但实际上内存空间有限,你不能说弄几个 G 的全局变量出来。如果是带初始化的全局变量,最终是会保存到生成的可执行文件里面的,影响 exe 的大小。
栈的空间是每个线程一个的,创建线程的时候有参数可以指定大小。主线程的大小可以在连接器中设置,默认是 1~2M 左右吧。
------解决思路----------------------
“全局变量理论上大小是不受限制”?哪个理论?
标准已经规定,对象的大小不能超过65535个字节,对象包括(但不限于)数组、结构、联合、枚举、指针,等等。也许可以超过,但那未必是安全的。
------解决思路----------------------
全局静态变量的作用域只在本文件内,生存期为变量定义到结束
栈变量的作用域只在函数内,生存期为变量定义到函数结束
------解决思路----------------------
他说的是所有全局变量的大小,并不指单个
------解决思路----------------------

自己创建线程的话:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
里面的第二个参数 dwStackSize
------解决思路----------------------
不是啊,主线程栈的大小就在截图那里设置
新线程是你有需要才创建,创建的时候可以指定大小。
------解决思路----------------------
理解和讨论之前请先学会如何观察!
VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
------解决思路----------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
请教,静态(全局变量)和栈变量有什么区别吗?
内存里,静态区/全局区有多大?
谢谢
------解决思路----------------------
你问的这些术语没听说过。而且也和C语言无关。
------解决思路----------------------
静态变量和栈变量的生命周期不同,一个是永生的一个是临时的;他们在内存中的位置不同,一个在静态变量 区,一个是函数执行时调整栈大小来容纳栈变量。静态变量那个区域多大我也没研究过,不懂
------解决思路----------------------
静态区/全局区大小是编译/链接时确定的,你有多少东西, 它就多大, 超过平台限制就不能编译或者运行,
------解决思路----------------------
全局变量理论上大小是不受限制的,但实际上内存空间有限,你不能说弄几个 G 的全局变量出来。如果是带初始化的全局变量,最终是会保存到生成的可执行文件里面的,影响 exe 的大小。
栈的空间是每个线程一个的,创建线程的时候有参数可以指定大小。主线程的大小可以在连接器中设置,默认是 1~2M 左右吧。
------解决思路----------------------
“全局变量理论上大小是不受限制”?哪个理论?
标准已经规定,对象的大小不能超过65535个字节,对象包括(但不限于)数组、结构、联合、枚举、指针,等等。也许可以超过,但那未必是安全的。
------解决思路----------------------
全局静态变量的作用域只在本文件内,生存期为变量定义到结束
栈变量的作用域只在函数内,生存期为变量定义到函数结束
------解决思路----------------------
他说的是所有全局变量的大小,并不指单个
------解决思路----------------------
全局变量理论上大小是不受限制的,但实际上内存空间有限,你不能说弄几个 G 的全局变量出来。如果是带初始化的全局变量,最终是会保存到生成的可执行文件里面的,影响 exe 的大小。
栈的空间是每个线程一个的,创建线程的时候有参数可以指定大小。主线程的大小可以在连接器中设置,默认是 1~2M 左右吧。
“全局变量理论上大小是不受限制”?哪个理论?
标准已经规定,对象的大小不能超过65535个字节,对象包括(但不限于)数组、结构、联合、枚举、指针,等等。也许可以超过,但那未必是安全的。
请教,怎样指定栈的大小
?
自己创建线程的话:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
里面的第二个参数 dwStackSize
------解决思路----------------------
全局变量理论上大小是不受限制的,但实际上内存空间有限,你不能说弄几个 G 的全局变量出来。如果是带初始化的全局变量,最终是会保存到生成的可执行文件里面的,影响 exe 的大小。
栈的空间是每个线程一个的,创建线程的时候有参数可以指定大小。主线程的大小可以在连接器中设置,默认是 1~2M 左右吧。
“全局变量理论上大小是不受限制”?哪个理论?
标准已经规定,对象的大小不能超过65535个字节,对象包括(但不限于)数组、结构、联合、枚举、指针,等等。也许可以超过,但那未必是安全的。
请教,怎样指定栈的大小
?
自己创建线程的话:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
里面的第二个参数 dwStackSize
多谢,如果要指定栈的大小,必须自己创建线程吗?
不是啊,主线程栈的大小就在截图那里设置
新线程是你有需要才创建,创建的时候可以指定大小。
------解决思路----------------------
VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
------解决思路----------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。