{"id":527,"date":"2010-03-04T02:40:37","date_gmt":"2010-03-04T00:40:37","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=527"},"modified":"2010-03-04T02:40:37","modified_gmt":"2010-03-04T00:40:37","slug":"migrando-a-64-bits","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=527","title":{"rendered":"Migrando a 64 bits"},"content":{"rendered":"<p>Hace unos d\u00edas decid\u00ed cambiar el sistema operativo a Ubuntu de 64 bits. A fin de cuentas es el futuro, y cualquier d\u00eda lo necesitar\u00e9 por cuestiones de memoria, as\u00ed que mejor ir comenzando ahora. Al principio pensaba que iba a tener problemas con alg\u00fan programa en concreto, pero la verdad es que hasta ahora todo est\u00e1 funcionando como la seda:<\/p>\n<ul>\n<li>MPlayer y Mencoder funcionan perfectamente y reproducen todos los formatos que necesito (entre ellos H.264, DivX, WMV y RealMedia); y ni siquiera he necesitado instalar los plugins privativos para que me funcionen incluso los v\u00eddeos en formato WMV9 (que utiliza <a href=\"http:\/\/en.wikipedia.org\/wiki\/VC-1\" target=\"_blank\">VC-1<\/a>).<\/li>\n<li>Eclipse funciona perfectamente con la m\u00e1quina virtual de Java de 64 bits, aunque tuve que borrar la carpeta <strong>.eclipse<\/strong> de mi directorio personal y reinstalar los plugins para lenguaje C y Python.<\/li>\n<li>Y tampoco tengo problema alguno con <a href=\"http:\/\/labs.adobe.com\/downloads\/flashplayer10_64bit.html\" target=\"_blank\">Flash de 64 bits<\/a>, aunque sea a\u00fan una prerelease y no una versi\u00f3n estable.<\/li>\n<\/ul>\n<p>Un detalle que me preocupaba mucho es \u00bfcuan problem\u00e1tico es portar c\u00f3digo C a 64 bits? En general deber\u00eda funcionar, salvo si el tama\u00f1o de alg\u00fan tipo fundamental cambia a 64 bits y en el c\u00f3digo asumimos que es de 32 bits. Y de hecho hab\u00eda algunas posibilidades de que ocurriese, pues hay tres posibles modelos para C en 64 bits: <strong>LP64, ILP64<\/strong> y<strong> LLP64<\/strong>. En el primero, que es el que utiliza Linux\/GCC o MacOS X, <em>int<\/em> es de 32 bits, mientras que <em>long int<\/em> es de 64 bits. En el segundo, en cambio, los dos tipos miden 64 bits. En el \u00faltimo caso, el m\u00e1s compatible (y adem\u00e1s utilizado por el compilador VirtualC++ de Microsoft), miden todos 32 bits, siendo <em>long long int<\/em> la \u00fanica manera de conseguir un tipo de 64 bits. \u00bfCual es mejor? Bajo mi punto de vista, LP64, porque permite f\u00e1cilmente mantener total compatibilidad hacia atr\u00e1s si se escribe el c\u00f3digo con una pizca de cuidado, adem\u00e1s de permitir, con el mismo c\u00f3digo, acceder a toda la memoria disponible mediante aritm\u00e9tica de punteros, tanto en 32 como en 64 bits. Para conseguir todo esto, en concreto, hay que asegurarse de utilizar <em>long int<\/em> para aquellas variables que se utilicen en aritm\u00e9tica de punteros (porque, de esa forma, siempre tendr\u00e1n el mismo tama\u00f1o que un puntero y se podr\u00e1 direccionar toda la memoria sin problemas), as\u00ed como para aquellas que no importe si son de 32 o 64 bits, utilizar <em>int<\/em> para aquellas que tengan que ser forzosamente de 32 bits, o cuando se quiera ahorrar en tama\u00f1o, y <em>long long int<\/em> para aquellas que tengan que ser necesariamente de 64 bits.<\/p>\n<p>Mi miedo ven\u00eda por FBZX. Sin embargo, tras probarlo, funcion\u00f3 correctamente&#8230; aunque hay que decir que de milagro, porque hay un punto en que s\u00ed utilic\u00e9 un <em>long int<\/em> en lugar de <em>int<\/em> a secas: justo en la funci\u00f3n que pinta cada pixel, cuando estamos en un modo de 24 o 32 bits por pixel. Pese a todo, gracias a que la arquitectura Intel es <em>little endian<\/em>, el c\u00f3digo funciona (cosa que no har\u00eda si fuese <em>big endian<\/em>). Es un detalle que corregir\u00e9 en la siguiente versi\u00f3n, para la que sacar\u00e9 paquete .deb tanto en 32 como en 64 bits.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unos d\u00edas decid\u00ed cambiar el sistema operativo a Ubuntu de 64 bits. A fin de cuentas es el futuro, y cualquier d\u00eda lo necesitar\u00e9 por cuestiones de memoria, as\u00ed que mejor ir comenzando ahora. Al principio pensaba que iba a tener problemas con alg\u00fan programa en concreto, pero la verdad es que hasta ahora &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=527\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Migrando a 64 bits<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-527","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=527"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/527\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}