Faits :
A.
Par jugement du 23 août 2018, le Tribunal de police de la République et canton de Genève a condamné X._, pour séjour illégal et infractions aux art. 19 al. 1 et 19a ch. 1 LStup, à une peine privative de liberté de trois mois ainsi qu'à une amende de 300 francs.
B.
Par arrêt du 18 janvier 2019, la Chambre pénale d'appel et de révision de la Cour de justice genevoise, statuant sur l'appel du ministère public et sur l'appel joint formé par X._ contre ce jugement, a réformé celui-ci en ce sens que l'expulsion du prénommé du territoire suisse est ordonnée pour une durée de huit ans et que l'Etat de Genève doit lui payer la somme de 2'380 fr. à titre d'indemnité pour la réparation de son tort moral. Elle a confirmé le jugement pour le surplus.
La cour cantonale a retenu les faits suivants.
B.a. X._, ressortissant algérien, est né en 1977 à A._. Il est célibataire et sans enfant. Selon ses dires, il aurait vécu en Algérie jusqu'à l'âge de 17 ans et y aurait été scolarisé jusqu'à l'âge de 16 ans. Il aurait appris le métier de mécanicien "sur le tas". A 17 ans, il serait parti à B._, puis aurait gagné C._ en 1995. Se trouvant en Suisse depuis lors, le prénommé ne travaille pas depuis des années, sauf parfois auprès d'une association genevoise de réduction des risques liés aux drogues. Avant son interpellation, il dormait dans un abri de protection civile. En détention, il n'a pas reçu de traitement pour l'hépatite C dont il souffre, mais se trouvait toujours sous méthadone et Rivotril. Dans le cadre de la présente cause, X._ a été détenu du 10 juin au 10 octobre 2018.
Selon l'extrait de son casier judiciaire, le prénommé a été condamné à 28 reprises entre 2008 et 2018, essentiellement pour des infractions contre le patrimoine - en particulier à une reprise pour brigandage -, contre l'intégrité corporelle et contre la LStup, dont une fois pour crime contre cette loi. Les condamnations les plus récentes ont été prononcées, deux fois en 2016 pour séjour illégal et non-respect d'une assignation à un lieu de résidence ou d'une interdiction de pénétrer dans une région déterminée, en 2017 pour infraction à la LStup, dommages à la propriété, violation de domicile et vol, la même année pour vol, dommages à la propriété et violation de domicile, ainsi que, toujours en 2017 puis en 2018, pour séjour illégal.
B.b. Du 14 février au 24 mars 2018, puis du 24 mai au 10 juin 2018, X._ a persisté à séjourner en Suisse alors qu'il faisait l'objet d'une interdiction d'entrée sur le territoire valable jusqu'au 16 novembre 2018.
Le 10 juin 2018, il a remis à une toxicomane 1 g brut d'héroïne, contre une somme de 9 francs. L'intéressé a en outre détenu 0,5 g brut de cette substance.
Du 14 février au 24 mars 2018, X._ a régulièrement consommé de l'héroïne, à raison d'une dose par week-end.
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 18 janvier 2019, en concluant, avec suite de frais et dépens, principalement à sa réforme en ce sens que son expulsion du territoire suisse n'est pas ordonnée et qu'une indemnité de 6'800 fr. lui est allouée à titre de réparation du tort moral. Subsidiairement, il conclut à sa réforme en ce sens que son expulsion du territoire suisse est ordonnée pour une durée de trois ans et qu'une indemnité de 6'800 fr. lui est allouée à titre de réparation du tort moral. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire et l'octroi de l'effet suspensif.
Par courrier du 19 février 2019, le Président de la Cour de droit pénal du Tribunal fédéral a indiqué que le recours en matière pénale interjeté contre un prononcé d'expulsion déployait de lege un effet suspensif, de sorte que la demande d'effet suspensif était sans objet et qu'il n'y avait dès lors pas lieu de statuer sur celle-ci.
Considérant en droit :
1.
Le recourant conteste le principe ainsi que la durée de l'expulsion ordonnée à son encontre.
1.1. Aux termes de l'art. 66a bis CP, le juge peut expulser un étranger du territoire suisse pour une durée de trois à quinze ans si, pour un crime ou un délit non visé à l'art. 66a CP, celui-ci a été condamné à une peine ou a fait l'objet d'une mesure au sens des art. 59 à 61 ou 64 CP. Comme toute décision étatique, le prononcé d'une expulsion non obligatoire doit respecter le principe de la proportionnalité ancré aux art. 5 al. 2 et 36 al. 2 et 3 Cst. Il convient ainsi d'examiner si l'intérêt public à l'expulsion l'emporte sur l'intérêt privé de la personne à demeurer en Suisse. Une telle pesée des intérêts répond également aux exigences découlant de l'art. 8 par. 2 CEDH concernant les ingérences dans la vie privée et familiale (cf. arrêts 6B_1314/2019 du 29 janvier 2019 consid. 5.1; 6B_607/2018 du 10 octobre 2018 consid. 1.4.1; 6B_371/2018 du 21 août 2018 consid. 3.2). S'agissant d'un étranger arrivé en Suisse à l'âge adulte, l'examen de la proportionnalité suppose une prise en compte de la nature et de la gravité de la faute, du temps écoulé depuis la commission de l'infraction, du comportement de l'auteur durant cette période, de la durée de son séjour en Suisse, de la solidité des liens sociaux, culturels et familiaux avec le pays hôte et avec le pays de destination (cf. ATF 139 I 145 consid. 2.4 p. 149; 139 I 31 consid. 2.3.3 p. 34 ss; 135 II 377 consid. 4.3 p. 381; arrêts 6B_1314/2019 précité consid. 5.1; 6B_607/2018 précité consid. 1.4.1; 6B_371/2018 précité consid. 3.2).
1.2. La cour cantonale a exposé que les faits pour lesquels le recourant était condamné n'étaient pas d'une grande gravité. L'intéressé séjournait cependant en Suisse sans titre valable depuis 1995 et s'était rendu coupable à réitérées reprises de dommages à la propriété, de violations de domicile, de délits et d'un crime contre la LStup, de lésions corporelles simples, de vols ou encore d'un brigandage. Le recourant avait ainsi notamment contribué à la propagation de substances nocives pour la santé humaine, comme il l'avait encore fait le 10 juin 2018. Son comportement témoignait de son mépris total de l'ordre juridique et de son incapacité à le respecter depuis une décennie. Le recourant avait été condamné à une lourde peine privative de liberté d'ensemble de 27 mois en mars 2017, soit un peu plus d'un an avant les événements ayant fait l'objet de la présente condamnation. Il avait récidivé alors qu'il bénéficiait d'une libération conditionnelle dont le délai d'épreuve courait toujours. Les sanctions prononcées à son encontre ne parvenaient donc pas à l'empêcher de commettre de nouvelles infractions et il était, dès lors, à craindre que le recourant menace à nouveau l'ordre et la sécurité publics. L'autorité précédente a ajouté que, depuis sa libération de la détention le 10 octobre 2018, l'intéressé n'avait pas occupé les services de police. Selon la cour cantonale, la durée du séjour du recourant en Suisse, soit 23 ans, était considérable. L'intéressé était arrivé en Suisse à l'âge de 18 ans et avait commencé à consommer de l'héroïne deux ans plus tard. Il ne s'était jamais intégré en Suisse ni, eu égard à son statut administratif, n'avait exercé d'activité professionnelle rémunérée et pérenne. Il n'avait pas de domicile et dormait dans des structures d'accueil. Le recourant ne prétendait pas avoir développé en Suisse un cercle social particulier ni s'être d'une quelconque manière inséré dans la vie locale. Aucun membre de sa famille ne résidait en Suisse. Sa mère vivrait en Algérie. Les liens du recourant avec ce dernier pays étaient ténus, voire inexistants. Le recourant prétendait ne pas y être retourné depuis une vingtaine d'années, bien qu'il y eût passé son enfance puis son adolescence. Compte tenu de son âge et de son absence de formation, ses perspectives de réinsertion ou de resocialisation n'étaient pas plus sombres en Algérie qu'en Suisse. L'intéressé avait davantage de chances d'exercer une activité dans son pays, puisqu'il ne disposait pas d'une autorisation en Suisse.
Sur le plan médical, la cour cantonale a indiqué que le recourant était toxicodépendant depuis 1997, principalement à l'héroïne, malgré de régulières cures de sevrage. En juin 2018, il bénéficiait toujours d'un suivi auprès de l'Hôpital D._ et d'un traitement médicamenteux à base de Rivotril et de Mirtazapine, ainsi que d'un traitement de substitution à la méthadone, ce qui ne l'empêchait pas de prendre de l'héroïne chaque week-end. Selon l'autorité précédente, l'Algérie disposait d'un Office national de lutte contre la drogue et la toxicomanie. De toute manière, même si le recourant devait souffrir momentanément de manque et d'un sevrage abrupt, sa vie ne serait pas mise en danger, contrairement à ce qui était le cas lorsqu'il combinait la méthadone et l'héroïne. Son hépatite C n'avait pas nécessité de suivi en détention et le recourant n'avait pas prétendu devoir en reprendre un à sa sortie. Il n'avait pas soutenu qu'il ne pourrait pas bénéficier, en Algérie, d'un traitement pour son épilepsie.
1.3. Le raisonnement de la cour cantonale ainsi que la pesée des intérêts effectuée ne prêtent pas le flanc à la critique, tous les éléments pertinents à cet égard ayant été considérés.
L'argumentation du recourant est irrecevable dans la mesure où elle s'écarte de l'état de fait de la cour cantonale, par lequel le Tribunal fédéral est lié (cf. art. 105 al. 1 LTF). Il en va ainsi lorsque celui-ci prétend n'avoir fourni de l'héroïne que par "solidarité". Le recourant évoque par ailleurs divers aspects qui ressortent tous de la pesée des intérêts effectuée par la cour cantonale, en particulier la gravité des infractions pour lesquelles il a été condamné, la quotité de la peine prononcée, la durée de son séjour en Suisse, ou encore l'absence de nouvelle poursuite pénale depuis sa libération de la détention.
Le recourant prétend qu'il ne pourrait bénéficier, en Algérie, d'un traitement à base de méthadone. Sans développer sur ce point un grief recevable - répondant aux exigences de motivation découlant de l'art. 106 al. 2 LTF -, l'intéressé se prévaut d'une attestation du 23 mai 2017 dont il ressortirait qu'un tel traitement n'existe pas dans son pays d'origine. On ne voit pas en quoi il aurait été arbitraire, pour l'autorité précédente, de ne pas se fonder sur cette pièce émanant du service de psychiatrie des Soins communautaires de l'Hôpital D._ - en relevant que le service en question n'était nullement spécialisé dans le domaine des addictions et que le document concerné ne révélait pas quelles recherches avaient été entreprises pour arriver à cette conclusion -, en notant l'existence en Algérie d'un Office national de lutte contre la drogue et la toxicomanie. Quoi qu'il en soit, le recourant ne démontre aucunement, au moyen d'un grief répondant aux exigences de motivation découlant des art. 42 al. 2 et 106 al. 2 LTF, que son expulsion pourrait, même à supposer qu'il puisse rencontrer des difficultés à se procurer de la méthadone, se révéler contraire à l'art. 3 CEDH, lequel prohibe la torture et les peines ou traitements inhumains ou dégradants.
En définitive, nonobstant la gravité relative des faits sanctionnés par la cour cantonale, celle-ci pouvait, sans violer le droit national, constitutionnel ou conventionnel, ordonner l'expulsion du recourant du territoire suisse. On rappellera à cet égard que la Cour européenne des droits de l'Homme estime que, compte tenu des ravages de la drogue dans la population, les autorités sont fondées à faire preuve d'une grande fermeté à l'encontre de ceux qui contribuent à la propagation de ce fléau (cf. arrêts CourEDH K.M. c. Suisse du 2 juin 2015 [requête no 6009/10], § 55; Dalia c. France du 19 février 1998, Recueil CourEDH 1998-I 76 § 54; cf. aussi arrêt 6B_143/2019 du 6 mars 2019 consid. 3.4.2). En l'occurrence, même si le recourant n'a remis à une tierce personne qu'une quantité modeste d'héroïne, il a contribué à la propagation d'un dangereux stupéfiant. Surtout, il ne peut se prévaloir - et ne se prévaut d'ailleurs nullement - d'une quelconque intégration en Suisse, pays dans lequel il n'a pas de travail, de logement, de cercle social ou familial, et où il n'a pas séjourné licitement. On ne voit ainsi pas à quel droit protégé par l'art. 8 CEDH ou à quel autre droit acquis porterait atteinte une mesure d'expulsion. L'intérêt public à cette mesure s'avère en revanche évident, puisque le recourant n'a cessé, au cours des dernières années, de violer la loi pénale et de commettre de très nombreuses infractions, en particulier contre la propriété ou l'intégrité physique, sans que des condamnations successives pussent l'amender. Force est donc de reconnaître que l'intéressé représente une menace importante pour l'ordre et la sécurité publics. Il apparaît enfin que les chances de réinsertion du recourant sont meilleures en Algérie - pays dans lequel il possède encore de la famille - qu'en Suisse, où il ne lui est pas permis de travailler ni de séjourner.
S'agissant de la durée de l'expulsion, le recourant prétend tout d'abord que la cour cantonale aurait violé son droit d'être entendu en n'expliquant pas les motifs qui l'avaient poussée à fixer celle-ci à huit ans. On comprend toutefois de l'arrêt attaqué que cette durée était, selon la cour cantonale, celle qui pouvait être retenue compte tenu des intérêts importants présidant à l'expulsion du recourant, sans porter une atteinte disproportionnée à sa vie privée. Une telle manière de faire n'a aucunement violé le droit d'être entendu du recourant (cf. sur ce point ATF 143 III 65 consid. 5.3 p. 70; 142 I 135 consid. 2.1 p. 145; 141 III 28 consid. 3.2.4 p. 41; 139 IV 179 consid. 2.2 p. 183). Pour le reste, le recourant mentionne en vain diverses affaires dans lesquelles des expulsions de moindre durée ont été prononcées alors que des peines plus importantes avaient été infligées. En effet, celui-ci ne peut se prévaloir, pour sa part, d'aucun droit à séjourner en Suisse, ni se plaindre d'une quelconque atteinte à des garanties découlant des art. 13 Cst. ou 8 CEDH compte tenu de l'absence totale d'intégration en Suisse. La durée de l'expulsion n'a pas, pour le surplus, à être symétrique à la durée de la peine prononcée. En l'occurrence, la durée de huit ans s'avère certes importante, mais ne représente que la moitié de la durée maximale d'une telle mesure au sens de l'art. 66a bis CP.
Enfin, on relèvera que le recourant ne peut rien tirer des directives du Procureur général du Ministère public de la République et canton de Genève (consultables sur la page Internet http://ge.ch/justice/ directives-du-procureur-general), lesquelles ne lient en rien le Tribunal fédéral dans son examen de l'application du droit constitutionnel et fédéral (cf. arrêt 6B_607/2018 précité consid. 1.4.2). Ces directives apparaissent au demeurant dénuées de pertinence dans une affaire où le ministère public a, quant à lui, requis, dans son appel formé contre le jugement du 23 août 2018, une expulsion d'une durée de dix ans.
Au vu de ce qui précède, la cour cantonale a, à bon droit, ordonné l'expulsion du recourant du territoire suisse pour une durée de huit années. Le grief doit être rejeté dans la mesure où il est recevable.
2.
Le recourant conteste encore le montant de l'indemnité pour tort moral lui ayant été allouée en raison de sa détention pour des motifs de sûreté injustifiée.
2.1. Aux termes de l'art. 431 CPP, si le prévenu a, de manière illicite, fait l'objet de mesures de contrainte, l'autorité pénale lui alloue une juste indemnité et réparation du tort moral (al. 1). En cas de détention provisoire et de détention pour des motifs de sûreté, le prévenu a droit à une indemnité ou à une réparation du tort moral lorsque la détention a excédé la durée autorisée et que la privation de liberté excessive ne peut être imputée sur les sanctions prononcées à raison d'autres infractions (al. 2).
S'agissant du mode et de l'étendue de l'indemnisation fondée sur les art. 429 ss CPP, il n'est pas exclu de s'inspirer des règles générales des art. 41 ss CO. Ces dispositions accordent au juge un large pouvoir d'appréciation, que le Tribunal fédéral ne revoit qu'avec retenue (ATF 142 IV 245 consid. 4.1 p. 248). L'ampleur de la réparation morale dépend avant tout de la gravité des souffrances physiques ou psychiques consécutives à l'atteinte subie par l'intéressé et de la possibilité d'adoucir sensiblement, par le versement d'une somme d'argent, la douleur morale qui en résulte. Sa détermination relève du pouvoir d'appréciation du juge. En raison de sa nature, l'indemnité pour tort moral, qui est destinée à réparer un dommage qui ne peut que difficilement être réduit à une simple somme d'argent, échappe à toute fixation selon des critères mathématiques, de sorte que son évaluation en chiffres ne saurait excéder certaines limites. L'indemnité allouée doit toutefois être équitable. Selon la jurisprudence, un montant de 200 fr. par jour en cas de détention injustifiée de courte durée constitue une indemnité appropriée, dans la mesure où il n'existe pas de circonstances particulières qui pourraient fonder le versement d'un montant inférieur ou supérieur. Le taux journalier n'est qu'un critère qui permet de déterminer un ordre de grandeur pour le tort moral. Il convient ensuite de corriger ce montant compte tenu des particularités du cas (durée de la détention, retentissement de la procédure sur l'environnement de la personne acquittée, gravité des faits reprochés, etc.) (ATF 143 IV 339 consid. 3.1 p. 342 et les références citées).
Conformément à la jurisprudence, il n'y a en principe pas lieu de prendre en considération les frais d'entretien au domicile de l'ayant droit lors de la fixation de l'indemnité pour tort moral. L'indemnité doit ainsi être fixée sans égard au lieu de vie de l'ayant droit et à ce qu'il va faire de l'argent obtenu (ATF 125 II 554 consid. 4a p. 559; 123 II 10 consid. 4c p. 13). Toutefois, dans la mesure où le bénéficiaire domicilié à l'étranger serait exagérément avantagé en raison des conditions économiques et sociales existant à son lieu de domicile, il convient d'adapter l'indemnité vers le bas (ATF 125 II 554 consid. 4a p. 559; 123 III 10 consid. 4 p. 11 ss; cf. arrêts 6B_58/2016 du 18 août 2016 consid. 4.2; 6B_909/2015 du 22 juin 2016 consid. 2.3.1). L'ampleur de l'indemnité pour tort moral doit être justifiée compte tenu des circonstances particulières, après pondération de tous les intérêts, et ne doit donc pas paraître inéquitable. Cela signifie que, lorsqu'il faut prendre exceptionnellement en considération un coût de la vie plus faible pour calculer une indemnité pour tort moral, on ne peut pas procéder schématiquement selon le rapport du coût de la vie au domicile du demandeur avec celui de la Suisse ou à peu près selon ce rapport. Sinon, l'exception deviendrait la règle (ATF 125 II 554 consid. 4a p. 559). Ainsi le Tribunal fédéral a-t-il admis une réduction, non schématique, de l'indemnité pour tort moral lorsque les frais d'entretien au domicile de l'intéressé sont beaucoup plus bas (ATF 125 II 554 consid. 4a p. 559 : Voïvodine, pouvoir d'achat 18 fois plus élevé, permettant une réduction de l'indemnité, réduction toutefois ramenée de 14 fois à 2 fois; arrêt 1A.299/2000 du 30 mai 2001 consid. 5c : Bosnie Herzégovine, pouvoir d'achat 6 à 7 fois plus élevé permettant une réduction de l'indemnité de 75%, jugée élevée par le Tribunal fédéral mais demeurant néanmoins dans les limites du pouvoir d'appréciation de la cour cantonale).
2.2. La cour cantonale a exposé que le recourant avait été maintenu en détention pour des motifs de sûreté, sur la base d'une ordonnance du Tribunal de police du 23 août 2018, à la suite de sa condamnation à une peine privative de liberté de trois mois. Il avait ensuite été libéré par l'autorité précédente le 10 octobre 2018, soit 34 jours après que ladite peine privative de liberté eut été purgée. Le recourant vivait illégalement en Suisse depuis 1995, n'avait pas de domicile fixe et se trouvait sans revenus depuis des années, à l'exception de montants minimes perçus pour de petites tâches accomplies au service d'une association venant en aide aux toxicomanes. Il n'avait aucune charge et était censé retourner vivre en Algérie en raison de la mesure d'expulsion prononcée. Le PIB par habitant dans ce pays était environ 20 fois moins élevé qu'en Suisse. Au vu de cette différence conséquente, il se justifiait d'adapter le montant de l'indemnité journalière au niveau de vie dans le pays d'origine de l'intéressé. Un montant journalier de 70 fr. pouvait être retenu car il était adapté au tort moral du recourant ainsi que proportionné au niveau de vie en Algérie. Une indemnité de 2'380 fr. (soit 34 jours à 70 fr. le jour) pouvait ainsi être fixée.
2.3. Le recourant soutient tout d'abord qu'une réduction fondée sur la différence du coût de la vie entre l'Algérie et la Suisse ne se justifierait pas dès lors qu'il conviendrait de renoncer à cette mesure. Le grief du recourant étant rejeté sur ce point (cf. consid. 1 supra), son argumentation est, dans cette mesure, irrecevable.
Le recourant prétend que même si son expulsion devait être confirmée, il conviendrait de retenir qu'il résiderait encore pour un temps en Suisse, compte tenu des difficultés liées à une expulsion vers l'Algérie. L'intéressé ne saurait cependant s'appuyer sur de telles conjectures - fondées pour partie sur un éventuel refus de sa part de se soumettre à la mesure prononcée - afin d'obtenir une indemnité plus importante. Il convient au contraire de considérer que l'arrêt attaqué entrera en force dès que le Tribunal fédéral aura statué sur le sort du présent recours.
Indépendamment des considérations qui précèdent, le recourant soutient que l'indemnité journalière de 70 fr. serait trop faible. Il apparaît pourtant que la cour cantonale a procédé à une réduction non schématique de l'indemnité journalière dont la base - selon la jurisprudence du Tribunal fédéral - était de 200 fr., afin de tenir compte du coût de la vie considérablement moindre en Algérie qu'en Suisse. L'autorité précédente a en outre précisé que ce montant était adapté aux suites d'une détention qui n'avait pas causé au recourant de souffrances particulières ni n'avait affecté son environnement professionnel ou familial, dès lors que l'intéressé n'avait alors pas de domicile et vivait dans le dénuement. Le montant journalier fixé, de même que la somme totale de 2'380 fr. allouée, s'avère équitable. La cour cantonale n'a, à cet égard, pas excédé le large pouvoir d'appréciation dont elle dispose. Le grief doit être rejeté dans la mesure où il est recevable.
3.
Le recours doit être rejeté dans la mesure où il est recevable. Comme il était dépourvu de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF), dont le montant sera fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour de justice de la République et canton de Genève, Chambre pénale d'appel et de révision.
Lausanne, le 18 mars 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa