100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > overflow属性我会用 overflow和stack有什么区别 – CSS – 前端 css table odd

overflow属性我会用 overflow和stack有什么区别 – CSS – 前端 css table odd

时间:2024-04-01 00:15:12

相关推荐

overflow属性我会用 overflow和stack有什么区别 – CSS – 前端 css table odd

那么,什么时候会把给用完了呢?如果大家记得C程序中的局部变量是在栈中分配的,函数调用会占用一部分栈空间,则可以很容易地构造出相应的测试用例。

1、定义占用空间过大的局部变量所导致的栈溢出

C:\> more stack_local.c

/*

* Allocate too much memory from stack will cause stack overflow.

*/

#include <stdio.h>

int main(int argc, char *argv[])

{

int foo[1000000];

return 0;

}

C:\> cl stack_local.c

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80×86

Copyright (C) Microsoft Corporation. All rights reserved.

stack_local.c

Microsoft (R) Incremental Linker Version 8.00.50727.42

Copyright (C) Microsoft Corporation. All rights reserved.

/out:stack_local.exe

stack_local.obj

C:\> stack_local

此时出现一个异常对话框:stack-local.jpg 。

2、函数递归调用导致的栈溢出

C:\> more stack_recursive.c

/*

* Infinite recursive calls will lead to stack overflow soon.

*/

#include <stdio.h>

static void foo(void);

static void bar(void);

int main(int argc, char *argv[])

{

foo();

return 0;

}

static void foo(void)

{

bar();

}

static void bar(void)

{

foo();

}

C:\> cl stack_recursive.c

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80×86

Copyright (C) Microsoft Corporation. All rights reserved.

stack_recursive.c

Microsoft (R) Incremental Linker Version 8.00.50727.42

Copyright (C) Microsoft Corporation. All rights reserved.

/out:stack_recursive.exe

stack_recursive.obj

C:\> stack_recursive

该程序没声没息就结束了。查看进程返回值能发现它其实是异常终止了。只不过没有像 stack_local 那样弹出一个对话框。

C:\> echo %errorlevel%

-1073741819

要搞清楚这两个程序为什么有这点细微的区别,可以查阅一下二者的汇编代码。原来是 _chkstk() 在起作用,其中 stack_local 在程序初始加载时就会导致 _chkstk() 失败,触发异常。而 stack_recursive 可以正确加载,并运行一段时间,然后导致栈溢出,并触发异常。

要正确处理栈溢出采用以下办法:

(1)修正大家的程序,不要造成无穷递归或太深的递归。大家可以把某些递归代码非递归化,例如那个经典的 qsort ,最好就用非递归的算法来实现,就比较皮实一点。

(2)修正大家的程序,不要定义过大的局部变量,特别是在定义大结构、大数组时要格外小心。有时大家可能会用 _alloca() 这样的特殊函数直接在栈上分配空间,更要多加注意。

(3)利用编译器的特性,将进程允许的栈大小设置得大一些。例如可以采用 MSC 中的 /STACK 参数开关。

(4)对于那些还可能导致栈溢出的代码,采用 Microsoft 的结构化异常处理或标准的 C++ 异常处理机制,结合 _resetstkoflw() 进行处理。当然了,要是不嫌麻烦,大家也可以自己探测所用栈的大小,动态地检测是否可能导致栈溢出,以避免可能的异常。

@ 父元素使用相对定位?

除非子元素全部是绝对定位的,否则只要有静态子元素的宽度超过父元素的宽度就会撑开父元素。可以把父元素的宽度固定为100%(或100vw),并且把横向overflow属性设为hidden,这样就不会被撑开了,即:width:100%;overflow-x:hidden

@ div层级结构?

1、定位

定位:

1、普通流定位

普通流,又称为文档流

块级元素:从上到下一个一个的排列

行内元素:一行内从左到右的排列

2、浮动定位

1、什么是浮动定位

将元素排除在普通流之外,即脱离文档流

浮动元素不会占据页面空间

浮动元素会放置在"包含框"的左边或右边

浮动元素依旧位于包含框之内

浮动元素可以向左或向右浮动,直到碰见包含框的边缘或另一个已浮动的元素框为止

2、特点

1、浮动元素边缘不会超过其父元素的边缘

2、浮动元素不会重叠

3、浮动只能左右浮动,不会上下浮动

注意:非块级元素浮动的话,那么将会变成块级元素,允许修改 width 和 height

3、处理问题

1、让块级元素在同一行内显示

2、修改行内元素的 width 和 height

4、浮动属性

属性:float

取值:

none

left

right

清除浮动所带来的影响:

属性:clear

取值:left

right

both

5、子级元素的浮动,为父层元素所带来的影响

如果一个元素的所有子级内容都是浮动的,那么它的高度会变成 0

解决方案

1、设置父容器高度

2、设置父元素的 overflow:hidden;

3、在父元素中,增加一个空元素,添加clear:both;

2、显示方式

1、display

none:生成元素没有框,不占据页面空间,隐藏

block:按块级显示

inline:按行内方式显示

inline-block:行内块,所有的元素在一行内显示,允许修改width 和 height

使用场合:

1、控制元素的显示与隐藏

隐藏:display:none;

显示:

块级 :display:block

行内 :display:inline

2、将行内元素变成块级 或 行内块

目的:修改行内元素的宽和高

2、显示效果

1、visibility

可见性

取值:

visible :默认值,可见的

hidden :元素不可见,占据页面空间

collapse :用在表格上

问题:visibility:hidden 与 display:none的区别

2、opacity

透明度

取值:0 – 1

opacity:0.5;

3、vertical-align

垂直方向对齐

td

img

取值:

baseline : 默认,基线对齐

top : 顶部对齐

bottom :底部对齐

middle :居中对齐

放在img 上,控制的是 img 左右两端文本的垂直对齐方式

4、光标

改变鼠标的显示效果

属性:cursor

取值:

default

pointer :小手

crosshair :+

text : I

wait : 等待

help : ?

@ web外边框属性制作方法?

有两种方法可以实现,在外围边框的 DIV上加属性,overflow:hidden;不过这种方法可能无效,第二种应该最有效,在表单表格的那个DIV限宽,宽度要小于外围边框,然后加属性margin:0 auto;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。