我是一名高级程序员,架构对我来说很新,所以我决定在这里阅读有关Assembly的教程:
http://en.wikibooks.org/wiki/X86_Assembly/Print_Version
在教程的下方,有关如何转换Hello World的说明!程序
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
进入等效的汇编代码并生成以下内容:
.text
LC0:
.ascii "Hello, world!\12\0"
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $LC0, (%esp)
call _printf
movl $0, %eax
leave
ret
Run Code Online (Sandbox Code Playgroud)
对于其中一条线,
andl $-16, %esp
Run Code Online (Sandbox Code Playgroud)
解释是:
这段代码"和"ESP与0xFFFFFFF0,使堆栈与下一个最低的16字节边界对齐.对Mingw源代码的检查表明,这可能是出现在"_main"例程中的SIMD指令,它只在对齐的地址上运行.由于我们的例程不包含SIMD指令,因此不需要此行.
我不明白这一点.有人能给我一个解释,说明将堆栈与下一个16字节边界对齐是什么意思以及为什么需要它?如何andl实现这一目标?
在Java中使用Readers和Streams总是让我感到困惑的一件事是该close()方法可以抛出异常.因为将close方法放在finally块中是个好主意,这需要一些尴尬的情况.我通常使用这种结构:
FileReader fr = new FileReader("SomeFile.txt");
try {
try {
fr.read();
} finally {
fr.close();
}
} catch(Exception e) {
// Do exception handling
}
Run Code Online (Sandbox Code Playgroud)
但我也看到了这种结构:
FileReader fr = new FileReader("SomeFile.txt");
try {
fr.read()
} catch (Exception e) {
// Do exception handling
} finally {
try {
fr.close();
} catch (Exception e) {
// Do exception handling
}
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个结构,因为只有一个挡块,它看起来更优雅.是否有理由更喜欢第二种或替代结构?
更新:如果我指出两者read并且close只抛出IOExceptions ,它会有所作为吗?因此,在我看来,如果读取失败,关闭将因同样的原因而失败.
我最近遇到了一个问题,似乎我需要一个'静态抽象'方法.我知道为什么这是不可能的,但我怎样才能解决这个限制?
例如,我有一个抽象类,它有一个描述字符串.由于此字符串对于所有实例都是通用的,因此它被标记为static,但我想要求从此类派生的所有类都提供它们自己的Description属性,因此我将其标记为abstract:
abstract class AbstractBase
{
...
public static abstract string Description{get;}
...
}
Run Code Online (Sandbox Code Playgroud)
它当然不会编译.我想过使用接口但接口可能不包含静态方法签名.
我应该简单地使它成为非静态的,并且总是得到一个实例来获取特定于类的信息吗?
有任何想法吗?
我没有太多使用这两种方法来扩展类或创建针对类的扩展方法的经验.通过寻找其他人的工作,我在这里有一个问题.
我看到人们使用parital类来扩展项目中的实体类.同时,在同一个项目中,还有另一个包含很多实体类扩展方法的文件夹.
这样做是对的吗?我的意思是这两种方式都运作良好.当我想要扩展课程时,你能给我一些真正的练习吗?
我想要一个带右侧滚动条的表格.
我想用css完成这个没有任何插件(jQuery).
表头应该保持固定.
为了让这个工作,我需要做什么?
我需要在两个不同的URL上映射相同的servlet.我使用netbeans 7.0.1来管理我的整个项目,所以我使用友好的界面来修改web.xml文件.netbeans创建的是:
<servlet-mapping>
<servlet-name>fred</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>/url</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这是由tomcat 5.5读取而不会发出任何错误,但只有第二个模式有效,而第一个模式被忽略.
谷歌搜索我发现tomcat的正确方法是这样的:
<servlet-mapping>
<servlet-name>fred</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>fred</servlet-name>
<url-pattern>/url</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
所以,我的问题:这是tomcat中的一个错误吗?其他容器接受什么语法?
我需要使用已经"自定义"的特殊JRE批量编译.
Eclipse能够使用此JRE编译类,但我需要在Eclipse之外创建构建脚本.
Eclipse使用什么方法生成没有JDK的.class文件?
我有一个List<T>地方T是暴露了"用户名"属性的类.用户名是封装字符串的自定义类型.我IComparable<T>在这个简单返回的自定义类型上实现了接口
this.encapsulatedString.CompareTo(other.encapsulatedString)
Run Code Online (Sandbox Code Playgroud)
我这样定义了一个ICollectionViewList:
AllUsers=CollectionViewSource.GetDefaultView(myList);
Run Code Online (Sandbox Code Playgroud)
我添加了Sortdescription:
AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending));
Run Code Online (Sandbox Code Playgroud)
在这一行,代码抛出标题中声明的异常.我可以通过其他方式排序列表没有问题.异常来自哪里?