如果您对ELF文件的.bss部分应该放在哪里?和elf文件详解感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解ELF文件的.bss部分应该放在哪里?的各种细节,并对elf文件详解进行深入的分析,
如果您对ELF文件的.bss部分应该放在哪里?和elf文件详解感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解ELF文件的.bss部分应该放在哪里?的各种细节,并对elf文件详解进行深入的分析,此外还有关于(转)script标签到底该放在哪里、@Autowired注释应该放在哪里-属性或方法上?、asp.net – MS Chart控件创建的临时文件应该放在哪里?、c – 嵌套命名空间中模板类的前向声明:默认模板参数应该放在哪里?的实用技巧。
本文目录一览:- ELF文件的.bss部分应该放在哪里?(elf文件详解)
- (转)script标签到底该放在哪里
- @Autowired注释应该放在哪里-属性或方法上?
- asp.net – MS Chart控件创建的临时文件应该放在哪里?
- c – 嵌套命名空间中模板类的前向声明:默认模板参数应该放在哪里?
ELF文件的.bss部分应该放在哪里?(elf文件详解)
已知.bss段不存储在磁盘中,但内存中的.bss段应初始化为零。 但是它应该把内存放在哪里呢? 是否有任何信息显示在ELF头部或者.bss部分是否可能出现在数据部分的旁边,或者其他的东西?
Perl内存不足
CUDA和固定(页面locking)内存不是页面locking?
禁用交换(分页文件)以确保一切都在内存中
我如何识别无效的内存地址?
Linux内核如何决定使用哪个内存区域?
要知道bss段在内存中的位置,运行readelf -S program就足够了,并检查.bss行的Addr列。
在大多数情况下,您还会看到已初始化的数据部分( .data )即将出现。 也就是说,您将看到.data节的Addr + Size与.bss节的起始地址匹配。
但是,情况并非总是如此。 这些都是历史惯例, ELF规范 (与平台特定的补充一起阅读,例如在包含32位x86机器的第5章中)允许更复杂的配置,并不是所有的配置都受Linux支持。
例如,该部分根本就不能被称为.bss 。 制作BSS部分的唯一两个属性是:
该部分用SHT_NOBITS标记(即在存储器中占用空间,但在存储器上没有空间),在readelf的输出中显示为NOBITS 。
它映射到可加载( PT_LOAD ),可读( PF_R )和可写( PF_W )段。 存储器上的这种段也比存储器中短( p_filesz < p_memsz )。
您可以有多个BSS部分:PowerPC可执行文件可能具有.sbss和.sbss2用于未初始化的数据变量。
最后,BSS部分不一定与数据部分或堆相邻。 如果你检查Linux内核 (尤其是load_elf_binary函数),你可以看到BSS段(或者更确切地说,它映射到的段 )甚至可以与代码和初始化数据交错。 Linux内核设法将其排除。
BSS介于数据和堆之间,详见这篇奇妙的文章 。
您可以使用size找出每个部分的size :
cnicutar@lemon:~$ size try text data bss dec hex filename 1108 496 16 1620 654 try
总结
以上是小编为你收集整理的ELF文件的.bss部分应该放在哪里?全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
(转)script标签到底该放在哪里
一般script标签会被放在头部或尾部。头部就是<head>里面,尾部一般指<body>里[4-5]。
将script放在<head>里,浏览器解析HTML,发现script标签时,会先下载完所有这些script,再往下解析其他的HTML。讨厌的是浏览器在下载JS时,是不能多个JS并发一起下载的。不管JS是不来来自同一个host,浏览器最多只能同时下载两个JS,且浏览器下载JS时,就block掉解析其他HTML的工作[1]。将script放在头部,会让网页内容呈现滞后,导致用户感觉到卡。所以yahoo建议将script放在尾部,这样能加速网页加载。
将script放在尾部的缺点,是浏览器只能先解析完整个HTML页面,再下载JS。而对于一些高度依赖于JS的网页,就会显得慢了。所以将script放在尾部也不是最优解,最优解是一边解析页面,一边下载JS。
所以[2]提出了一种更modern的方式:使用async和defer。80%的现代浏览器都认识async和defer属性[3],这两个属性能让浏览器做到一边下载JS(还是只能同时下载两个JS),一边解析HTML。他的优点不是增加JS的并发下载数量,而是做到下载时不block解析HTML。
<script type="text/javascript" src="path/to/script1.js" async></script>
<script type="text/javascript" src="path/to/script2.js" async></script>
带async属性的script会异步执行,只要下载完就执行,这会导致script2.js可能先于script1.js执行(如果script2.js比较大,下载慢)。defer就能保证script有序执行,script1.js先执行,script2.js后执行。
结论
1. [2]认为,如果可以不考虑支持<IE9的IE,最好的做法是将script标签放在head中,并使用async/defer属性。这样浏览器就能一边下载JS,一边解析其他的HTML。
2. Google自己的代码script放的也有点乱,有的放在</body>后面[6],有的放在<body>里面[7],还有的放在<head>里面[8]。总体来说,放在<body>里其实是最常见的做法。
3. 本文只讨论script的位置,至于link和style,还是放在head里的做法比较常见。link也是要下载CSS的啊,为毛不考虑下载CSS阻塞HTML解析的问题呢?其实,一般情况下,JS和CSS,放在head和放在body区别不大。CSS的link放在body也是可以的,只是可能导致页面暂时没有样式[9-10]。
参考
[1] https://developer.yahoo.com/performance/rules.html#js_bottom=
[2] http://stackoverflow.com/questions/436411/where-is-the-best-place-to-put-script-tags-in-html-markup
[3] http://caniuse.com/#search=defer
[4] https://github.com/IgorMinar/foodme/blob/master/app/index.html
[5] https://github.com/GoogleChrome/wReader-app/blob/master/index.html
[6] https://github.com/GoogleChrome/multi-device/blob/master/_preview.html
[7] https://github.com/GoogleChrome/samples/blob/b2668086c25470e107e59f4ffa92dc0c21c63de3/beacon/index.html
[8] https://github.com/GoogleChrome/web-audio-samples/blob/gh-pages/samples/audio/adaptive-release.html
[9] http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag
[10] http://stackoverflow.com/questions/1642212/whats-the-difference-if-i-put-css-file-inside-head-or-body
转载于猿2048:➫《(转)script标签到底该放在哪里》
@Autowired注释应该放在哪里-属性或方法上?
如何解决@Autowired注释应该放在哪里-属性或方法上??
我个人更喜欢你的第一个选择(构造函数注入),因为该myDao
字段可以标记为final:
@Controller
public class MyControllear {
private final MyDao myDao;
@Autowired
public MyController(MyDao myDao) {
this.myDao = myDao;
}
构造函数注入还允许你在单元测试中测试类,而无需依赖Spring的代码。
第二种选择最好写成:
@Controller
public class MyControllear {
@Autowired
private MyDao myDao;
MyController() {
}
使用字段注入,Spring将创建对象,然后更新标记为注入的字段。
你没有提到的一个选项是@Autowired
使用setter方法(setter注入):
@Controller
public class MyControllear {
private MyDao myDao;
MyController() {
}
@Autowired
public void setMyDao(MyDao myDao) {
this.myDao = myDao;
}
你不必选择一个或另一个。你可以将字段注入用于某些依赖项,并将构造函数注入用于其他针对同一对象的注入。
解决方法
哪个更正确?
这(在方法上带有@Autowired注释)?
@Controller
public class MyController
{
private MyDao myDao;
@Autowired
public MyController(MyDao myDao)
{
this.myDao = myDao;
}
这(在属性上带有@Autowired注释)?
@Controller
public class MyController
{
@Autowired
private MyDao myDao;
public MyController(MyDao myDao)
{
this.myDao = myDao;
}
@Autowired注释应该去哪里?
asp.net – MS Chart控件创建的临时文件应该放在哪里?
<add key="ChartimageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
适合开发,但在IIS上部署不太好.我发现一个论坛帖子提到你可以完全删除路径,它将临时文件直接转储到我项目的根目录中
<add key="ChartimageHandler" value="storage=file;timeout=20;" />
我不想弄乱我的根文件夹,所以我现在就解决这个问题:
<add key="ChartimageHandler" value="storage=file;timeout=20;url=~/App_Data/ChartimageTemp/;" />
想法或其他人在做什么?我有点好奇为什么这甚至是一个可配置的选项.我使用.net 3.5,也许这在4.0中有所不同?
解决方法
MSChart: ChartImageHandler pros/cons of the different storage settings
我指的是Scott Mitchell的一篇文章:
http://www.4guysfromrolla.com/articles/081909-1.aspx
我决定使用“内存”选项,因此没有配置的文件或路径:
<appSettings> <add key="ChartimageHandler" value="storage=memory;deleteAfterServicing=true;"/> </appSettings>
c – 嵌套命名空间中模板类的前向声明:默认模板参数应该放在哪里?
namespace n1 { namespace n2 { template <typename T,typename S> struct A; } using n2::A; }
后跟一个定义,实际上是在一个不同的文件中,其间有东西:
struct X { }; namespace n1 { namespace n2 { template <typename T,typename S = X> struct A { }; } using n2::A; }
然后以下总是好的:
n1::n2::A <int> a;
但这个捷径
n1::A <int> a;
在clang中给出编译错误
error: too few template arguments for class template 'A'
除非我删除了前瞻性声明; g接受两者.
clang似乎与第一个不包含默认模板参数的声明保持一致(我不能包含它,因为我还没有定义X).
如果我使用单个命名空间没有问题(但这不是一个解决方案).
我做错了什么,或者哪个编译器是正确的?快捷方式如何与前向声明和嵌套命名空间一起工作?我需要他们所有人.
S的前向声明X默认参数当然有效,但实际上太繁琐(实际上有几十个,整个文件结构都会改变).
解决方法
然后你可以使用myname
在你的情况下,坚持模板< class T,class S = X>使用A = n2 :: A< T,S> ;;在你的n1 刚写了一篇关于这个Symbol not found when using template defined in a library的答案的宝石有btw,有一个阅读.
好吧,它没有被勾选,所以我会帮助更多!
不会编译
#include <iostream> namespace n1 { namespace n2 { template<class U,class V> struct A; } template<class U,class V> using A = n2::A<U,V>; } static n1::A<int,int>* test; struct X {}; namespace n1 { namespace n2 { template<class U,class V> struct A {}; } template<class U,class V=X> using A = n2::A<U,V>; } static n1::A<int> test2; int main(int,char**) { return 0; }
为什么? C的“第一宣言规则”
这是编译器的输出:
make all if ! g++ -Isrc -Wall -Wextra -O3 -std=c++11 -g -gdwarf-2 -Wno-write-strings -MM src/main.cpp >> build/main.o.d ; then rm build/main.o.d ; exit 1 ; fi g++ -Wall -Wextra -O3 -std=c++11 -g -gdwarf-2 -Wno-write-strings -Isrc -c src/main.cpp -o build/main.o src/main.cpp:26:17: error: wrong number of template arguments (1,should be 2) static n1::A<int> test2; ^ src/main.cpp:13:47: error: provided for ‘template<class U,class V> using A = n1::n2::A<U,V>’ template<class U,V>; ^ src/main.cpp:26:24: error: invalid type in declaration before ‘;’ token static n1::A<int> test2; ^ src/main.cpp:16:24: warning: ‘test’ defined but not used [-Wunused-variable] static n1::A<int,int>* test; ^ src/main.cpp:26:19: warning: ‘test2’ defined but not used [-Wunused-variable] static n1::A<int> test2; ^ make: *** [build/main.o] Error
好吧,它对未使用的变量抱怨,公平,但注意它是对第13行的引用,那是因为它使用了第一个定义默认模板参数非常原始,我现在不能引用规范.
https://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fdefault_args_for_templ_params.htm
这可能会提供一些见解.
无论如何注意到:
这编译
#include <iostream> namespace n1 { namespace n2 { template<class U,class V=X> using B = n2::A<U,V>; } static n1::B<int> test2; int main(int,char**) { return 0; }
因为B没有先前的定义.
构建输出
make all if ! g++ -Isrc -Wall -Wextra -O3 -std=c++11 -g -gdwarf-2 -Wno-write-strings -MM src/main.cpp >> build/main.o.d ; then rm build/main.o.d ; exit 1 ; fi g++ -Wall -Wextra -O3 -std=c++11 -g -gdwarf-2 -Wno-write-strings -Isrc -c src/main.cpp -o build/main.o src/main.cpp:16:24: warning: ‘test’ defined but not used [-Wunused-variable] static n1::A<int,int>* test; ^ src/main.cpp:26:19: warning: ‘test2’ defined but not used [-Wunused-variable] static n1::B<int> test2; ^ g++ build/main.o -o a.out
看,好:)
请记住,使用前向声明,您只能使用* s和& s(因为它们具有已知大小,固定大小) – 哦和&& s
所以你需要立即在那里获得默认值!
我们今天的关于ELF文件的.bss部分应该放在哪里?和elf文件详解的分享已经告一段落,感谢您的关注,如果您想了解更多关于(转)script标签到底该放在哪里、@Autowired注释应该放在哪里-属性或方法上?、asp.net – MS Chart控件创建的临时文件应该放在哪里?、c – 嵌套命名空间中模板类的前向声明:默认模板参数应该放在哪里?的相关信息,请在本站查询。
本文标签: