s********k 发帖数: 6180 | 1 【 以下文字转载自 CS 讨论区 】
发信人: silverhawk (silverhawk), 信区: CS
标 题: register在CPU中,但是也可以用内存地址访问?(embedded)
发信站: BBS 未名空间站 (Fri Dec 10 14:00:56 2010, 美东)
一般register是内存地址最开始的一段。既然不在RAM但是在CPU中,那么register和
RAM中其他内存用连续地址用处在于软件比较好访问?或者对于VM好操作? |
|
s********k 发帖数: 6180 | 2 【 以下文字转载自 CS 讨论区 】
发信人: silverhawk (silverhawk), 信区: CS
标 题: register在CPU中,但是也可以用内存地址访问?(embedded)
发信站: BBS 未名空间站 (Fri Dec 10 14:00:56 2010, 美东)
一般register是内存地址最开始的一段。既然不在RAM但是在CPU中,那么register和
RAM中其他内存用连续地址用处在于软件比较好访问?或者对于VM好操作? |
|
h*****n 发帖数: 209 | 3 【 以下文字转载自 Programming 讨论区 】
发信人: hanuman (神猴), 信区: Programming
标 题: 程序中的各个变量/数组的内存地址是否会混在一起?
发信站: BBS 未名空间站 (Sun Dec 19 01:03:09 2010, 美东)
比如说一个C程序内有很多int型的变量,还有一些int 或 char的数组,
有时候我发现这些变量的内存地址有可能和这些数组的地址混在一起了,这样就导致了
一些莫名其妙的bug。
不知道这是由于compiler的问题,还是程序本身没设计好。
我想版上的高手应该也经历过类似的问题。那么如何预防这种bug呢? |
|
s********k 发帖数: 6180 | 4 一般register是内存地址最开始的一段。既然不在RAM但是在CPU中,那么register和
RAM中其他内存用连续地址用处在于软件比较好访问?或者对于VM好操作? |
|
h*****n 发帖数: 209 | 5 比如说一个C程序内有很多int型的变量,还有一些int 或 char的数组,
有时候我发现这些变量的内存地址有可能和这些数组的地址混在一起了,这样就导致了
一些莫名其妙的bug。
不知道这是由于compiler的问题,还是程序本身没设计好。
我想版上的高手应该也经历过类似的问题。那么如何预防这种bug呢? |
|
s*i 发帖数: 388 | 6 自己也用过好几个exploit的程序,搞fedora获得root。但是不知道那些牛人们,用
buffer
overflow来attack的人是怎么计算出要覆盖的内存地址的阿?
难道那些heap ram地址不是动态的么?怎么能那么精准的计算出需要覆盖的位置阿? |
|
p******e 发帖数: 528 | 7 比方说我有个一个并行程序,同时还有一个全局变量。如果多个线程都需要访问
同一个全局变量,会不会说由于多个线程都申请访问同一个内存地址而造成互相
竞争的情况呢?谢谢! |
|
S*A 发帖数: 7142 | 8 GTT 这个我熟悉。你说的 GTT 是一个显卡的物理虚拟地址。Intel 显卡没有
自己的内存。显卡在 PCI BAR 上有保留了一段物理地址空间,的确是连续的。
这个就是 GTT。这个物理虚拟地址不是被固定内存来 back 的,而仅仅是读
写显卡内存的一个窗口。这段空间不能用 kmalloc 来获得,因为根本不是
内存。使用 PCI reserve 来保留。
Intel 显卡内部有自己的 page table。所以这个 GTT 仅仅是通过显卡来读写
内存的窗口。当显卡需要使用内存的时候,这个内存就必须被显卡的 pg table
map 到 GTT 地址上。这时候,同样的内存就有两个物理地址都可以访问到。
一个是原来的内存地址,另外一个是 GTT 窗口里的显卡搞的虚拟物理地址。
被 MAP 在GTT 的内存,必须通过 GTT 窗口来读写。在这个窗口里,有
显卡来维护这个内存的 caching。如果直接访问原来内存的物理的地址
就会造成显卡内存的cache不一致。后果自负。
然后真正使用到的内存,是page size大小的,也就是 4K 一个。
不同的物理地址的 page 可以在 GTT... 阅读全帖 |
|
d****n 发帖数: 1637 | 9 http://zhuanlan.zhihu.com/thought/20010926
达达 · 6 天前
今天我要教大家一些无用技能,也可以叫它奇技淫巧或者黑魔法。用得好可以提升性能
,用得不好就会招来恶魔,嘿嘿。
黑魔法导论
为了让大家在学习了基础黑魔法之后能有所悟,在必要的时候能创造出本文传授之外的
属于自己的魔法,这里需要先给大家打好基础。
学习Go语言黑魔法之前,需要先看清Go世界的本质,你才能获得像Neo一样的能力。
在Go语言中,Slice本质是什么呢?是一个reflect.SliceHeader结构体和这个结构体中
Data字段所指向的内存。String本质是什么呢?是一个reflect.StringHeader结构体和
这个结构体所指向的内存。
在Go语言中,指针的本质是什么呢?是unsafe.Pointer和uintptr。
当你清楚了它们的本质之后,你就可以随意的玩弄它们,嘿嘿嘿。
第一式 - 获得Slice和String的内存数据
让我小试身手,你有一个CGO接口要调用,需要你把一个字符串数据或者字节数组数据
从Go这边传递到C那边,比如像这个:mysql/con... 阅读全帖 |
|
s*i 发帖数: 388 | 10 【 以下文字转载自 Programming 讨论区 】
发信人: sci (ence), 信区: Programming
标 题: 那些用buffer overflow来attack的人是怎么计算出要覆盖的内存地址的阿?
发信站: BBS 未名空间站 (Wed Mar 23 20:58:01 2011, 美东)
自己也用过好几个exploit的程序,搞fedora获得root。但是不知道那些牛人们,用
buffer
overflow来attack的人是怎么计算出要覆盖的内存地址的阿?
难道那些heap ram地址不是动态的么?怎么能那么精准的计算出需要覆盖的位置阿? |
|
i*c 发帖数: 1132 | 11 刚装上 ATI5770,1G显存,OS是windows vista ultimate 32bit。 4G物理内存。为什
么系统显示还有3.3G内存可用, 难道1G显存不是全部map到内存地址? 请高人解释一
下。 |
|
a**e 发帖数: 64 | 12 从性能考虑的话,不同cpu最好访问内存不同地址,好像这样cache利用率最高。如果所
有线程只访问一个全局变量只读的话,我觉得应该影响不大。有没有大牛能核实一下? |
|
j*****u 发帖数: 1133 | 13 没看懂你的问题,你是问RAM中连续地址的好处?
地址连续的话可以直接计算出地址,比如array中取某个元素可以很容易的计算出其地址
另外一个好处是cache方便,可以preload到cache中增加cache命中的机率 |
|
s********k 发帖数: 6180 | 14 差不多就是这个意思,register和RAM物理上不在一起,但是一起编地址。为何cache方
便?可以RAM有自己地址从0x0000开始,register另外一个地址,反正只需要CPU知道就
是了,这样的话难道cache机制不一样?
地址 |
|
f**e 发帖数: 3343 | 15 假和尚
32位的意思是内存地址是32bit=2^2X2^10X2^10X2^10=4G
32位的系统最多支持4G内存。 |
|
a****l 发帖数: 8211 | 16 谁很你说一般register是内存开始的一段?register在内存中的机器基本是是不会有VM
的. |
|
s********k 发帖数: 6180 | 17 我看很多embedded的device内存模块的datasheet,好像内存最开始的都是写的寄存器
。不知道理解对没有
VM |
|
L**********1 发帖数: 797 | 18 是不是要内存管理的模式?
如果使用了虚拟内存应该不会有问题吧? |
|
c******e 发帖数: 1032 | 19 不断用恶意代码暴力填充内存,然后随便填一个值进去(就是靠谱的虚拟内存地址) |
|
n*********i 发帖数: 567 | 20 最近碰到的这个问题太奇怪了,以前从没碰到过。C语言XP平台,好像就是地址空间里
,有一个BYTE没法写入,怎么写它的值都不变。只在我的一个APP里有这种情况,就是
在MAIN函数里定义了一个STRUCT,不管用MEMSET还是直接赋值,那个位置的值始终是
0x0a,直接去内存地址里看也是一样,请问有人碰到过这种情况吗? |
|
t****t 发帖数: 6806 | 21 堆栈上溢出了会冲掉返回地址, 堆上溢出有什么用?
至于每次是不是分配不同的地址, 你为什么不写个程序把地址打印出来看看? |
|
h*****n 发帖数: 209 | 22 【 以下文字转载自 JobHunting 讨论区 】
发信人: hanuman (神猴), 信区: JobHunting
标 题: C语言里面的register变量能否进行取地址操作?
发信站: BBS 未名空间站 (Sat Nov 20 18:19:03 2010, 美东)
一直不是很清楚,C语言里面的register变量有它的内存地址吗?
比如说: register int a=3; 那么&a代表什么意思呢? |
|
b*****e 发帖数: 1193 | 23 实际上,你所说的register有不是一类.在你大脑里混成了一个
1.general Regs
这个是在CPU register file里,属于CPU的一部分.比如ARM的R0-R15
X86的AX, BX, CX, DX
2.SFR
这个是在内存里,是把CPU扩展成MCU的extension.比如基于ARM7的TMS470
其实还有更多的类别,比如协处理器的Regs,
等你入门了慢慢领会吧. |
|
z*****n 发帖数: 7639 | 24 你这个分法也是含糊的。
在很多microcontroller里面general purpose register
也是内存的一部分。只不过对于general register可以
进行内部总线寻址(快速寻址),外部总线只是内部总
线的扩展。 |
|
h*****n 发帖数: 209 | 25 一直不是很清楚,C语言里面的register变量有它的内存地址吗?
比如说: register int a=3; 那么&a代表什么意思呢? |
|
h***n 发帖数: 276 | 26 register var 没有内存地址
&a对于register var非法 |
|
X****r 发帖数: 3557 | 27 一般来说,程序里定义的变量,包括数组,各有不同的地址,是不会混淆的。
你说的“数组”大概是指指针吧。一旦使用指针,自然有可能指向错误的地方。 |
|
c****p 发帖数: 6474 | 28 不是所有的可用内存空间都是MATLAB可用的。
第一个,32位的OS,理论的地址空间是4G,但是可实际访问的内存地址没有4G(因为有
些地址需要留给IO,真正可访问的内存地址只有3G多)
第二个,MATLAB在存大数组的时候,需要相应的连续空间。很多时候,机器看上去有很
多可用内存,但是不一定是连续的,这时候碰上个上百M或者上G的大数组,out of mem
ory很正常。
尽量使用小一点的数据集吧。
workspace |
|
s********k 发帖数: 6180 | 29 【 以下文字转载自 CS 讨论区 】
发信人: silverhawk (silverhawk), 信区: CS
标 题: 高人指点怎么在embedded sys(atmel 系列)上写内存管理
发信站: BBS 未名空间站 (Fri Oct 29 12:00:50 2010, 美东)
Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理
问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用
链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里
面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内
存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了
(4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了 |
|
s********k 发帖数: 6180 | 30 【 以下文字转载自 CS 讨论区 】
发信人: silverhawk (silverhawk), 信区: CS
标 题: 高人指点怎么在embedded sys(atmel 系列)上写内存管理
发信站: BBS 未名空间站 (Fri Oct 29 12:00:50 2010, 美东)
Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理
问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用
链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里
面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内
存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了
(4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了 |
|
s****A 发帖数: 80 | 31 我的理解是
1. new 开辟出来的内存必须由delete来回收
但是所delete的指针变量并不一定是new时所使用的指针变量,只要是指相同一个内存
地址的指针变量就可以
比如 int *a=new int;
a=100;
int * b=a;
delete b;
这样就不会造成内存泄露了,并不一定要delete a;对吗?
2.在用new开辟数组所需内存的时候,编译器是不是还要记住指针变量所对应的开辟内
存大小
比如 int *a=new int[100];
... ...
delete [] a;
这里a存放的只是一个内存地址,但是应该有某种机制记住了a之后是一片大小为100的
内存区域,否则就没办法用delete语句收回这些内存了吧
但是在这种情况下,是否就只能通过delete [] a来释放了?不能像 1 中的情况那样用
别的指针变量释放这片内存了?
谢谢! |
|
b*********n 发帖数: 1607 | 32 全神就是完全的神,不是神的一部分,不是神的一个表现形式,而是拥有神的完全本质
体,完全和神
同等。
位格英文用person表示。它的含义是
1、有独立的智慧和思考能力
2、有自己的情感
3、有自己的意志思想,能够做出判断和决定。
4、有自主的行动能力
5、(有的解释还加上这条)有自我认知能力。比如人有位格,人的位格知道自己是自
己,知道40年
前的自己和今天的自己都是同一个人。
人有本质体和位格,人有一个本质体和一个位格。
神也有本质体和位格,神有一个本质体和三个位格。
打个不是很恰当的比方帮助理解:
写程序用到变量,变量包括了变量名和对应内存地址。内存地址就是本质体,它上面的
变量值就是本
质属性。变量名就是位格。写程学的人都知道,不同的变量名可以指向同一个内存地址
。对于人来
说,就是一个变量名指向一个地址。对于神来说,就是3个变量名指向同一个地址。 |
|
s********k 发帖数: 6180 | 33 Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理
问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用
链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里
面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内
存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了
(4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了 |
|
p**i 发帖数: 688 | 34 至少能看到8GB(7.74 GB usable), 参看我贴的图, 37-bit PAE的address space是
128GB
但是估计windows最多让用64GB(the same limit as Windows Server 2003)
我以前也是让ramdisk绕过windows自己读写内存, 后来怀疑机器有时显卡花屏和它有关系
(如果ramdisk读写4GB以上的地址空间和显卡驱动的IO映射地址空间重合)
现在换成ramdisk通过windows分配内存, 显卡驱动的IO映射地址空间应该在物理内存地址
空间之外(>8GB)? 试试看会不会还出问题
今年 |
|
d***a 发帖数: 13752 | 35 1. 不是。因为有virtual到physical的地址转换,virtual连续physical不一定连续,
反之亦然。实际上连续的physical页面,有可能会分配给不同的virtual地址空间。
2. Kernel访问它自己的memory objects不能有page fault,所以它专属的内存,
实际上是相当于用physical地址来访问,绕过virtual到到physical的地址转换。
这样它自已的内存管理就得用contiguous physical address。我以前hack过
Linux kernel,当时是这样的,现在应该也没有变吧。 |
|
c****p 发帖数: 6474 | 36
is
static
1. 文件内可见?
2. 在全局变量区分配空间?
3. 文件内可见?
them?
理论上函数传参都是对实参的数据拷贝(而不是实参本身)进行操作。因而对函数参数
的任何修改在函数返回后都不会影响实参的值。传值不说;传址实际是传递某变量所在
的内存地址,通过修改该地址指向的内存空间就可以实质上修改该变量的值。一般情况
下,需要在函数中修改变量值的行为都会使用传址。
const,不可修改,一般放在只读数据区(.rodata),尝试对其修改可能会引发段错(好
像编译器实现决定的);volatile,访问被其限定的变量时必须从内存中获取,实质上
使该变量成为non-cachable,常见于被I/O访问的内存空间。
大多数十进制小数转化成二进制存储时会有截断误差,表面上相等的两个浮点数实际并
不相等,一般用误差小于某阈值来判定相等。
not at all
stack:FILO,可重入式函数必须的结构;heap,memory pool,由OS管理,用户通过
malloc/free和new/delete实现动态内存的申请和释放。
pree
这个不懂,猜下:task不可打断当前in... 阅读全帖 |
|
c****p 发帖数: 6474 | 37
is
static
1. 文件内可见?
2. 在全局变量区分配空间?
3. 文件内可见?
them?
理论上函数传参都是对实参的数据拷贝(而不是实参本身)进行操作。因而对函数参数
的任何修改在函数返回后都不会影响实参的值。传值不说;传址实际是传递某变量所在
的内存地址,通过修改该地址指向的内存空间就可以实质上修改该变量的值。一般情况
下,需要在函数中修改变量值的行为都会使用传址。
const,不可修改,一般放在只读数据区(.rodata),尝试对其修改可能会引发段错(好
像编译器实现决定的);volatile,访问被其限定的变量时必须从内存中获取,实质上
使该变量成为non-cachable,常见于被I/O访问的内存空间。
大多数十进制小数转化成二进制存储时会有截断误差,表面上相等的两个浮点数实际并
不相等,一般用误差小于某阈值来判定相等。
not at all
stack:FILO,可重入式函数必须的结构;heap,memory pool,由OS管理,用户通过
malloc/free和new/delete实现动态内存的申请和释放。
pree
这个不懂,猜下:task不可打断当前in... 阅读全帖 |
|
S****z 发帖数: 666 | 38 那我看地址的时候看到的38,2C是不是物理地址?
你意思是我不应该看这些物理地址,应该看它的逻辑地址?
那怎么把GPS LOCATION转成门牌号啊?sigh,真是麻烦,所见还非所得了
计算机内存模型那块我大概知道它用一个叫什么虚拟内存的概念,
然后来来去去几个页面调度算法,再复杂的我就不太清楚了
不过貌似这跟我取数组元素地址减一下没啥关系吧
The
lived
in
. |
|
B********e 发帖数: 19317 | 39 其实你们真的搞懂对方在说什么吗?
小麦说:耶稣,耶和华这两个变量名都指向神这个内存地址。但是他们是不同的变量名。
黑龙说:不不不。。。耶稣和耶和华这两个名词只能用来作为内存地址的名称。所以当
小麦说耶稣的时候,不管小麦是如何定义和理解和使用耶稣这个名词的,她说的就只能
是内存地址名称,尽管小麦的意思是变量名。
其实展开想想,耶教徒们又何尝不是每天都在这样强奸着现代汉语的词汇呢?
不可外推理论又一次被实证了。哦耶~~
嗯,大致如此。 |
|
p********e 发帖数: 6030 | 40 ok,了解了,原来是说一共支持4G的地址可用。其他设备也占用了一些地址,所以系统
无法分配所有的地址给4G内存。并不是说其他设备利用了部分内存。这么说那多余的1G
就是完全浪费了。我现在已经拆掉了。 |
|
d***a 发帖数: 13752 | 41 如楼上说的,会以整数格式打印一个内存地址。C编译器会把字符串"1"存在内存中,把
它的内存地址存在s中,打印出来的就是这个地址。 |
|
p****i 发帖数: 83 | 42 一般要溢出的是stack上的buffer,而不是heap上的。
由于某个有缺陷的函数每次被调用的时候深度都一样,而进程每次启动堆栈虚地址都是
一样的,这样就知道函数返回地址应该填入什么数了。还有一种方式,就是填入已知程
序中包含jmp esp这条指令(X86也就一个字节,我记得)的地址,这样就可以跳转到堆
栈了。
现代操作系统有些反制措施,比如随机化堆栈地址,即使你能让程序crash,也很难猜
中地址从而运行你溢出的代码;还有堆栈内存不允许运行等。反正现在越来越难执行注
入代码了 |
|
Y*C 发帖数: 405 | 43 HDR Bracket HDR之包围曝光
HDR(高动态范围)图像的自动包围式曝光和timelapses。
SET键调整拍摄照片的数量,PLAY键调整照片曝光EV值的级差。请按下Q键则迅速关闭此
功能。
在拍照的M模式下,本功能为快门包围。在其它模式为曝光补偿包围。
HDR图像可以采取:
* ML遥控触发器:LCD的面部感应器和音频触发。
* ML定时器(HDR延时摄影)
* 按下快门,第一张照片是中间曝光(无EV补偿)的,并且使用2秒延时自拍。另外,
该模式工作时将拍下三张或以上照片,也就是说照片数量设置为2时,也是拍下3张照
片。
为了达到最佳效果,切换到手动对焦,并使用相对较慢的曝光时间。
对于每个HDR图片集,ML也写了一个进入脚本,用enfuse堆叠曝光(4.x版)。这个脚
本存储在DCIM文件/###佳能和命名后的第一张照片集,例如如果HDR顺序是从IMG_
1001.JPG ... IMG_1005.JPG,HDR脚本将被命名为HDR_1001.SH和由此产生的HDR图像将
作为HDR_1001.JPG保存。
要在计算机上运行的HDR的脚本,将在相同的目录中并运行(... 阅读全帖 |
|
S*A 发帖数: 7142 | 44 多谢夸奖。
GTT 主要是管理显卡使用的虚拟地址空间。然后显卡有个 pg table 映射到
真正的内存上。其实没有很多碎片的问题,碎片的大小就是 page。 显卡
驱动需要用的时候就拿 page。不用的时候就把 page 放会去。 swapping
是看内核有压力的时候,就释放多一点内存。Intel 的好处是显卡的内存
几乎是无限的,虽然一次只能有 GTT 窗口地址那么多同时用。
GTT 的碎片化其实不是什么问题。因为操作完的东西就可以释放了,
你基本上可以理解为一个 FIFO,在 Fence 以内的是显卡正在用的。
如果紧急需要,可以全部清除出去的,例如 hibernate to disk 的时候。
GTT 里面基本上没有什么需要长时间锁在里面的。 |
|
b******7 发帖数: 92 | 45 void * align_malloc(unsigned int size, unsigned int align);
void aligned_free(void * addr);
align_malloc函数要求你返回的内存地址时align的倍数,比如你调用malloc(size)申
请内存时返回的内存地址是不可控的,不一定满足是align的倍数。 |
|
R*******y 发帖数: 19 | 46 自己的C++程序里写了一个ExitProgram(),释放回收一些动态申请的内存空间。
我是用Visual Studio 2008编的Win32 Console程序,如果一按Ctrl+C可以强制终止程
序,但是很多动态申请的地址就不能回收了。有没有办法在程序里编写一些功能,使得
控制台程序接收到Ctrl+C的按键信号时,自动转到我的ExitProgram()函数里完成一些
内存地址的释放,从而尽可能地少留些垃圾在内存中?(当然局部函数中动态申请的一
些空间就没法释放了)
进一步地,如果这样的功能想在Linux下实现,是不是方法不一样?
请高手指教!谢谢! |
|
d******i 发帖数: 7160 | 47 同意。
忍不住看了int& m_a的内存位置存的值,居然就是值本身,不是什么地址。
用memcpy覆盖后原值没变,新值后移了4个字节。
但从vc里看已经变了。
好神奇啊。
到底有没有标准说引用型变量的内存位置该放什么东西呢?原值本身,还是原值的内存
地址? |
|
p*********t 发帖数: 17 | 48 一般情况下计算的瓶颈就是cpu和内存。我想3G以上的cpu本身性能没话说,不会成为瓶
颈。需要选比较大的内存是王道。32位cpu,只能address 4G内存地址,如果你的程序
用到比较大的矩阵乘法,可能会要求大于4G内存,这时候32位机要借助硬盘来暂时存储
数据,速度会慢很多,(20倍或更多)。而64位机可以address 的内存目前可以认为是
海量,所以只要再配个大内存就好了。
现在一般3G的cpu,多核都不便宜。如果仅仅购买一台电脑,要看是否会进行并行计算
,用不到的话没必要买。
另外,单机内存现在16GB算不错的,如果是非常大的计算,说不准32GB也可以考虑。 |
|
s*******e 发帖数: 1389 | 49 围棋算法多少还能理解,人工智能就难多了。转载一篇文章:
基于神经网络的人机对抗人工智能系统
作者:Harreke
摘要
人工智能是一门科学名称。自电子计算机发明后不久,人工智能学科即宣布创立,其目
的就是要模拟人类的智力活动机制来改进计算机的软件硬件构成,使他们掌握一种或多
种人的智能,以便在各种领域内有效替代人的脑力劳动,特别是解决用传统软硬件方法
难以解决的问题,如模式识别,复杂的控制行为或对海量的数据进行实时评估等。
所谓人工智能,就是由人工建立的硬件或软件系统的智能,是无生命系统的智能。智能
是人类智力活动的能力,是一个抽象的概念。一个软件或硬件系统是否有智能,只能根
据它所表现出来的行为是否和人类某些行为相类似来做判断。
人工智能在计算机上的实现,有两种不同的方式。一种是采用传统的编程技术,使系统
呈现智能的效果,而不考虑所用方法是否与人或生物机体所用的方法相同。这种方法称
为工程学方法,它的编程方式虽然简单,智能效果显著,可是算法和程序一旦固定下来
,智能就很难再进一步提高。另一种是模拟法,它不仅要看智能效果,还要求实现方法
和人类或生物机体所用的方法相同或类似。人工神经网... 阅读全帖 |
|