<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>堆栈 _ 扒房网</title>
	<atom:link href="https://www.gxjlyf.com/tag/17450/feed" rel="self" type="application/rss+xml" />
	<link>https://www.gxjlyf.com</link>
	<description>手机系统教程_手机软件教程_手机app使用教程_电脑软件教程_电脑系统教程</description>
	<lastBuildDate>Sat, 03 Dec 2022 03:51:25 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>今天说说什么是堆栈溢出</title>
		<link>https://www.gxjlyf.com/889420.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Sat, 03 Dec 2022 03:51:25 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[堆栈]]></category>
		<category><![CDATA[缓冲区]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/889420.html</guid>

					<description><![CDATA[一些用户在浏览网页时浏览器弹出堆栈溢出的提示窗口，这个窗口需要手动点击关闭，为什么会遇到堆栈溢出呢？是因为计算 ...]]></description>
										<content:encoded><![CDATA[<p>一些用户在浏览网页时浏览器弹出堆栈溢出的提示窗口，这个窗口需要手动点击关闭，为什么会遇到堆栈溢出呢？是因为计算机向缓冲区填充数据的时候数据长度超过了缓冲区的长度，就会出现堆栈溢出的提示。阅读下文了解<strong>浏览器提示堆栈溢出的解决方法</strong>。</p>
<p><img decoding="async" alt="什么是堆栈溢出？网页提示堆栈溢出怎么解决？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221203035124-638ac7bc2a81b.jpg" /></p>
<p><strong>堆栈溢出是指：</strong></p>
<p>当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上，理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符，但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配，这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区 又被称为&ldquo;堆栈&rdquo;。 在各个操作进程之间，指令会被临时储存在&ldquo;堆栈&rdquo;当中&ldquo;堆栈&rdquo;也会出现缓冲区溢出。</p>
<p>目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。分别是： 编写正确的代码，非执行的缓冲区，数组边界检查，程序指针完整性检查。</p>
<p><strong>操作步骤：</strong></p>
<p>1、按win+r打开运行窗口，输入cmd，如图所示：</p>
<p><img decoding="async" alt="什么是堆栈溢出？网页提示堆栈溢出怎么解决？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221203035124-638ac7bc47207.jpg" /></p>
<p>2、在命令提示符中，将以下代码复制到窗口中，回车执行即可，如图所示：</p>
<p>regsvr32 atl.dllregsvr32 shdocvw.dllregsvr32 urlmon.dllregsvr32 browseui.dllregsvr32 oleaut32.dllregsvr32 shell32.dllregsvr32 jscript.dllregsvr32 vbscript.dllregsvr32 mshtmled.dllregsvr32 CLBCATQ.DLLregsvr32 cscui.dllregsvr32 MLANG.dllregsvr32 stobject.dllregsvr32 WINHTTP.dllregsvr32 msxml3.dllregsvr32 query.dllregsvr32 jscript9.dllregsvr32 hlink.dll</p>
<p><img decoding="async" alt="什么是堆栈溢出？网页提示堆栈溢出怎么解决？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221203035124-638ac7bc60eb6.jpg" /></p>
<p>以上就是浏览器提示堆栈溢出的解决方法，堆栈溢出如果出现的太过频繁，则有可能破坏指针指向，用户还需尽快处理。</p>

<p><img src="https://www.gxjlyf.com/postviews/889420.png" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>关于简述堆和栈的区别和联系</title>
		<link>https://www.gxjlyf.com/884587.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Thu, 01 Dec 2022 07:28:53 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[内存]]></category>
		<category><![CDATA[堆栈]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/884587.html</guid>

					<description><![CDATA[作为一个小白的你来说，堆和栈的概念是不是总感觉很朦胧？他们认识你，而你只是偶尔见过，并没有深交。本文就此为题， ...]]></description>
										<content:encoded><![CDATA[<p>作为一个小白的你来说，堆和栈的概念是不是总感觉很朦胧？他们认识你，而你只是偶尔见过，并没有深交。本文就此为题，请听笔者简述堆和栈的区别和联系。</p>
<p><img decoding="async" alt="简述堆和栈的区别和联系" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201072852-638857b44fa97.jpg" /></p>
<p><strong>堆和栈的区别和联系：</strong></p>
<p>在计算机领域，堆栈是一个不容忽视的概念，堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构，只能在一端（称为栈顶（top））对数据项进行插入和删除。在单片机应用中，堆栈是个特殊的存储区，主要功能是暂时存放数据和地址，通常用来保护断点和现场。</p>
<p><strong>堆和栈的要点：</strong></p>
<p>堆，队列优先，先进先出（FIFO&mdash;first in first out）。</p>
<p>栈，先进后出（FILO&mdash;First-In/Last-Out）。</p>
<p>一般情况下，如果有人把堆栈合起来说，那它的意思是栈，可不是堆。</p>
<p><strong>堆和栈的对比分析：</strong></p>
<p>1、<strong>堆栈空间分配</strong></p>
<p>栈（操作系统）：由操作系统自动分配释放 ，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。</p>
<p>堆（操作系统）： 一般由程序员分配释放， 若程序员不释放，程序结束时可能由OS回收，分配方式倒是类似于链表</p>
<p><strong>2、堆栈缓存方式</strong></p>
<p>栈使用的是一级缓存， 他们通常都是被调用时处于存储空间中，调用完毕立即释放。</p>
<p>堆则是存放在二级缓存中，生命周期由虚拟机的垃圾回收算法来决定（并不是一旦成为孤儿对象就能被回收）。所以调用这些对象的速度要相对来得低一些。</p>
<p><strong>3、堆栈数据结构区别</strong></p>
<p>堆（数据结构）：堆可以被看成是一棵树，如：堆排序。</p>
<p>栈（数据结构）：一种先进后出的数据结构。</p>
<p>例如：</p>
<p>顺序栈AStack的类定义</p>
<p>01template &lt; class T &gt;02class AStack {03private:04int size ; // 数组的规模05T * stackArray ; // 存放堆栈元素的数组06int top ; // 栈顶所在数组元素的下标07public:08AStack ( int MaxStackSize ) // 构造函数09{ size = MaxStackSize ; stackArray = new T [MaxStackSize] ; top = -1 ; }10~AStack ( ) { delete [ ] stackArray ; } // 析构函数11bool Push ( const T&amp; item ) ; // 向栈顶压入一个元素12bool Pop ( T &amp; item ) ; // 从栈顶弹出一个元素13bool Peek ( T &amp; item ) const ; // 存取栈顶元素14int IsEmpty ( void ) const { return top = = -1 ; }15// 检测栈是否为空16int IsFull ( void ) const { return top &#61501; &#61501; size-1 ; }17// 检测栈是否为满18void clear ( void ) { top&#61501;-1 ; } // 清空栈19} ;复制代码template &lt; class T &gt;class AStack {private:int size ; // 数组的规模T * stackArray ; // 存放堆栈元素的数组int top ; // 栈顶所在数组元素的下标public:AStack ( int MaxStackSize ) // 构造函数{ size = MaxStackSize ; stackArray = new T [MaxStackSize] ; top = -1 ; }~AStack ( ) { delete [ ] stackArray ; } // 析构函数bool Push ( const T&amp; item ) ; // 向栈顶压入一个元素bool Pop ( T &amp; item ) ; // 从栈顶弹出一个元素bool Peek ( T &amp; item ) const ; // 存取栈顶元素int IsEmpty ( void ) const { return top = = -1 ; }// 检测栈是否为空int IsFull ( void ) const { return top &#61501; &#61501; size-1 ; }// 检测栈是否为满void clear ( void ) { top&#61501;-1 ; } // 清空栈} ;</p>
<p>举个栗子：</p>
<p>01void f() { int* p=new int[5]; }复制代码void f() { int* p=new int[5]; }</p>
<p>这条短短的一句话就包含了堆与栈，看到new，我们首先就应该想到，我们分配了一块堆内存，那么指针p呢？他分配的是一块栈内存，所以这句话的意思就是：在 栈 内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小，然后调用operator new分配内存，然后返回这块内存的首地址，放入栈中，他在VC6下的汇编代码如下：</p>
<p>00401028 push 14h</p>
<p>0040102A call operator new (00401060)</p>
<p>0040102F add esp,4</p>
<p>00401032 mov dword ptr [ebp-8],eax</p>
<p>00401035 mov eax,dword ptr [ebp-8]</p>
<p>00401038 mov dword ptr [ebp-4],eax</p>
<p>这里，我们为了简单并没有释放内存，那么该怎么去释放呢？是deletep么？澳，错了，应该是delete []p，这是为了告诉编译器：我删除的是一个数组，VC6就会根据相应的Cookie信息去进行释放内存的工作。</p>
<p>好了，我们回到我们的主题：<strong>堆和栈的区别在哪？</strong>笔者为此做出鄙陋总结。</p>
<p><strong>主要的区别由以下几点：</strong></p>
<p><strong>1、管理方式</strong>：对于栈来讲，是由编译器自动管理，无需我们手工控制；对于堆来说，释放工作由程序员控制，容易产生memory leak。</p>
<p><strong>2、空间大小</strong>：一般来讲在32位系统下，堆内存可以达到4G的空间，从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲，一般都是有一定的空间大小的，例如，在VC6下面，默认的栈空间大小是1M（好像是，记不清楚了）。当然，我们可以修改：</p>
<p><strong>3、打开工程</strong>，依次操作菜单如下：Project-》Setting-》Link，在Category中选中Output，然后在Reserve中设定堆栈的最大值和commit。</p>
<p><strong>注意：</strong>reserve最小值为4Byte；commit是保留在虚拟内存的页文件里面，它设置的较大会使栈开辟较大的值，可能增加内存的开销和启动时间。</p>
<p><strong>4、碎片问题</strong>：对于堆来讲，频繁的new/delete势必会造成内存空间的不连续，从而造成大量的碎片，使程序效率降低。对于栈来讲，则不会存在这个问题，因为栈是先进后出的队列，他们是如此的一一对应，以至于永远都不可能有一个内存块从栈中间弹出，在他弹出之前，在他上面的后进的栈内容已经被弹出，详细的可以参考数据结构，这里我们就不再一一讨论了。</p>
<p><strong>5、生长方向</strong>：对于堆来讲，生长方向是向上的，也就是向着内存地址增加的方向；对于栈来讲，它的生长方向是向下的，是向着内存地址减小的方向增长。</p>
<p><strong>6、分配方式</strong>：堆都是动态分配的，没有静态分配的堆。栈有2种分配方式：静态分配和动态分配。静态分配是编译器完成的，比如局部变量的分配。动态分配由alloca函数进行分配，但是栈的动态分配和堆是不同的，他的动态分配是由编译器进行释放，无需我们手工实现。</p>
<p><strong>7、分配效率</strong>：栈是机器系统提供的数据结构，计算机会在底层对栈提供支持：分配专门的寄存器存放栈的地址，压栈出栈都有专门的指令执行，这就决定了栈的效率比较高。堆则是C/C++函数库提供的，它的机制是很复杂的，例如为了分配一块内存，库函数会按照一定的算法（具体的算法可以参考数据结构/操作系统）在堆内存中搜索可用的足够大小的空间，如果没有足够大小的空间（可能是由于内存碎片太多），就有可能调用系统功能去增加程序数据段的内存空间，这样就有机会分到足够大小的内存，然后进行返回。显然，堆的效率比栈要低得多。</p>
<p>从这里我们可以看到，堆和栈相比，由于大量new/delete的使用，容易造成大量的内存碎片；由于没有专门的系统支持，效率很低；由于可能引发用户态和核心态的切换，内存的申请，代价变得更加昂贵。所以栈在程序中是应用最广泛的，就算是函数的调用也利用栈去完成，函数调用过程中的参数，返回地址，EBP和局部变量都采用栈的方式存放。所以，我们推荐大家尽量用栈，而不是用堆 。</p>
<p>虽然栈有如此众多的好处，但是由于和堆相比不是那么灵活，有时候分配大量的内存空间，还是用堆好一些。</p>
<p>上文便是今天说说堆和栈的区别简述，不管是堆还是栈，都要防止越界现象的发生（除非你是故意使其越界），因为越界的结果要么是程序崩溃，要么是摧毁程序的堆、栈结构，产生以想不到的结果，就算是在你的程序运行过程中，没有发生上面的问题，你还是要小心，说不定什么时候就崩掉，那时候debug可是相当困难的。</p>

<p><img src="https://www.gxjlyf.com/postviews/884587.png" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>今天说说Win7系统电脑上网弹出“堆栈溢出”提示怎么办</title>
		<link>https://www.gxjlyf.com/881490.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Thu, 01 Dec 2022 06:44:00 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[堆栈]]></category>
		<category><![CDATA[弹出]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/881490.html</guid>

					<description><![CDATA[近日收到不少Win7系统用户的反馈称，在浏览网页的时候经常会弹出&#8220;来自网页的消息&#8221;对话 ...]]></description>
										<content:encoded><![CDATA[<p>近日收到不少Win7系统用户的反馈称，在浏览网页的时候经常会弹出&ldquo;来自网页的消息&rdquo;对话框，提示&ldquo;堆栈溢出&rdquo;，虽然说对用户的使用影响不大，但是经常弹出来还是很烦人的，下面就给大家介绍解决这个问题的方法。</p>
<p><img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2f7bee6.jpg" /></p>
<p>1、打开自己常用的浏览器，这个方法适用于所有的浏览器。所以不用担心会出现其他的状况。</p>
<p><img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2f882f7.jpg" /></p>
<p>2、找到菜单栏，在菜单栏上面存在一个&ldquo;工具&rdquo;选项，单击工具这个按钮。</p>
<p>　<img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2fa7553.jpg" /></p>
<p>3、在&ldquo;工具&rdquo;这个选项下面有个&ldquo;Internet选项&rdquo;，点击这个功能选项。就可以进入&ldquo;Internet选项&rdquo;界面。</p>
<p><img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2fb4133.jpg" /></p>
<p>4、主要的操作就在&ldquo;Internet选项&rdquo;里面，当你点击&ldquo;Internet选项&rdquo;的时候就会弹出一个窗口。</p>
<p><img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2fc3c58.jpg" /></p>
<p>5、在&ldquo;Internet选项&rdquo;窗口上方有个&ldquo;高级&rdquo;按钮，点击这个按钮，然后在&ldquo;设置&rdquo;下一级存在一个功能&ldquo;禁用脚本调试&rdquo;，这个功能项在默认状态下是勾选起的，现在我们要取消勾选这个功能项。</p>
<p><img decoding="async" alt="Win7系统电脑上网弹出“堆栈溢出”提示怎么办？" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201064359-63884d2fd3c47.jpg" /></p>
<p>操作到这，我们就解决了堆栈溢出的问题，现在重启一下浏览器，你会发现，浏览器不会再次弹出堆栈溢出的对话框了，这也意味着问题已经解决了。</p>

<p><img src="https://www.gxjlyf.com/postviews/881490.png" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>小编教你网页提示堆栈溢出时怎么解决</title>
		<link>https://www.gxjlyf.com/872585.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Tue, 29 Nov 2022 04:21:31 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[堆栈]]></category>
		<category><![CDATA[提示]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/872585.html</guid>

					<description><![CDATA[网页提示堆栈溢出时怎么解决？当用户计算机打开某个网页时，若是重复提示堆栈溢出窗口，我们要在最快的速度下关闭该页 ...]]></description>
										<content:encoded><![CDATA[<p>网页提示堆栈溢出时怎么解决？当用户计算机打开某个网页时，若是重复提示堆栈溢出窗口，我们要在最快的速度下关闭该页面，如果问题依旧，则表示该问题在Windows本地，我们可以通过以下方法进行处理，具体过程请看下文。</p>
<p><strong>网页提示堆栈溢出时怎么解决？</strong></p>
<p>1、点击开始菜单中的运行按钮，输入CMD回车打开命令提示符界面；</p>
<p><img decoding="async" alt="网页提示堆栈溢出时怎么解决？" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221129042129-638588c913a90.jpg" /></p>
<p>2、在命令提示符界面中输入以下命令：</p>
<p>01regsvr32 atl.dll02regsvr32 shdocvw.dll03regsvr32 urlmon.dll04regsvr32 browseui.dll05regsvr32 oleaut32.dll06regsvr32 shell32.dll07regsvr32 jscript.dll08regsvr32 vbscript.dll09regsvr32 mshtmled.dll10regsvr32 CLBCATQ.DLL11regsvr32 cscui.dll12regsvr32 MLANG.dll13regsvr32 stobject.dll14regsvr32 WINHTTP.dll15regsvr32 msxml3.dll16regsvr32 query.dll17regsvr32 jscript9.dll18regsvr32 hlink.dll复制代码regsvr32 atl.dllregsvr32 shdocvw.dllregsvr32 urlmon.dllregsvr32 browseui.dllregsvr32 oleaut32.dllregsvr32 shell32.dllregsvr32 jscript.dllregsvr32 vbscript.dllregsvr32 mshtmled.dllregsvr32 CLBCATQ.DLLregsvr32 cscui.dllregsvr32 MLANG.dllregsvr32 stobject.dllregsvr32 WINHTTP.dllregsvr32 msxml3.dllregsvr32 query.dllregsvr32 jscript9.dllregsvr32 hlink.dll</p>
<p><img decoding="async" alt="网页提示堆栈溢出时怎么解决？" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221129042129-638588c9cad51.jpg" /></p>
<p>3、然后按回车，重新注册这些动态链接库后就可以解决堆栈溢出的问题了。</p>
<p>以上步骤便是网页提示堆栈溢出时的应对之策，用户如果发现关闭该网页就不再提示堆栈溢出的情况，可以不使用该教程的帮助。</p>

<p><img src="https://www.gxjlyf.com/postviews/872585.png" /></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
