Olá pessoal da lista, Acabei de fazer uma descoberta que vai contra a minha intuição.
Estava testando eficiência com arrays de inteiros (de (unsigned-byte 64) para ser mais exato) e descobri que arrays não ajustáveis são 10 vezes mais eficientes que as ajustáveis! Eu imaginava que não deveria haver diferença, porque, por exemplo, em C, se você aloca um array dinamicamente (com malloc), esse array é automaticamente ajustável (com realloc). Também descobri que, felizmente, você pode declarar uma array como sendo do tipo simple-array para poder aproveitar essa eficiência (simple-arrays são arrays não-ajustáveis, sem fill-pointer e sem "displacement" (i.e. arrays que são criadas sem passar o argumento :displace-to)). A única explicação que eu consigo pensar é que, se uma array ajustável é criada, o sbcl identifica seu tipo como sendo uma array "normal" (ao invés de identificá-la como uma simple-array), o que faz com que ele não consiga otimizar as chamadas para aref porque o tipo array "normal" não diferencia arrays com "displacement" ou sem "displacement". Alguém consegue me dar uma explicação mais coerente do que essa? Talvez uma que explique o porquê do sbcl não considerar as arrays ajustáveis como sendo do tipo simple-array (já que isso é permitido pela especificação)? Poder usar arrays ajustáveis sem problemas com a eficiência iria quebrar o galho no que eu pretendo fazer (embora não seja totalmente necessário, mas vou ter que sair copiando uma parte da array). Abraços, Gustavo. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lisp-br" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/lisp-br?hl=en -~----------~----~----~----~------~----~------~--~---
